[英]R - Find the location of the file
下面是我创建的用于查找文件位置的包装函数。 该功能有效,但是我想知道是否有比此更简单的解决方案。
此功能的目的是查找文件的文件夹。 由于list.files
返回目录和文件名,因此我不能将其用作setwd()
的输入。
setwd(list.files(fileName))
将不起作用
问题:
有没有可以提供文件夹功能的函数,所以我不必创建包装函数?
如何找到字符串中的最后一个“ /”。 我玩了regexpr("\\\\\\[^\\\\.]*$", Dir)
并不断出错。
任何答复或反馈,我们将不胜感激。
码:
findFileLocation <- function(FileName,...) {
#Find the location of the file
Dir <- list.files(pattern = FileName, recursive = TRUE)
#> Dir
#[1] "10-30/No time line/folderNames.csv"
positionOfDot <- regexpr("\\.[^\\.]*$", Dir)
#> positionOfDot
#[1] 18
numCharFile <- nchar(FileName)
#> numCharFile
#[1] 15
numCharDir <- nchar(Dir)
#> numCharDir
#[1] 21
fileDir <- substr(Dir, 1, (numCharDir-(numCharFile+1))) #+1 is to account for the "/"
fileDir #returns the actual location of the file
}
test <- findFileLocation("folderNames.csv")
从这里我可以执行代码:
setwd(file.path(mainDir, test))
注意:basename和dirname已经尝试过。
感谢@MrFlick。 答案是dirname(list.files(pattern = FileName, recursive = TRUE))
由于第一个问题已经回答,让我在这里回答第二个问题:
如何找到字符串中的最后一个“ /”。 我玩了
regexpr("\\\\\\[^\\\\.]*$", Dir)
并不断出错。
当我尝试使用此正则表达式时收到的错误消息是:
错误:“ [”是无法识别的以“ \\\\”开头的字符串的转义
此处报告的问题是,实际上使用了第三个反斜杠( \\
),而实际上是正斜杠( /
)。 使用regexpr("\\\\/[^\\\\.]*$", Dir)
不会引发任何错误。 但是,它没有执行预期的操作,即找不到最后的正斜杠。 这是因为此正则表达式搜索不带任何点 ( .
)的正斜杠,实际上,其思想是搜索不带任何(更多) 正斜杠的正斜杠 。
因此,所描述用例的正确正则表达式是regexpr("\\\\/[^\\\\/]*$", Dir)
。
Dir <- "10-30/No time line/folderNames.csv"
regexpr("\\/[^\\/]*$", Dir)
# returns 19
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.