下面是我为查找文件位置而创建的包装函数。该功能有效,但我想知道是否有比此更简单的解决方案。
此功能的目的是找到文件的文件夹。由于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。
答案 0 :(得分:1)
感谢@MrFlick。答案是dirname(list.files(pattern = FileName, recursive = TRUE))
答案 1 :(得分:0)
由于第一个问题已经回答,让我回答第二个问题:
我怎样才能找到最后一个&#34; /&#34;在一个字符串中。我和
regexpr("\\\[^\\.]*$", Dir)
一起玩并且一直出错。
我尝试使用此正则表达式时收到的错误消息是:
错误:&#39; [&#39;是一个无法识别的字符串开始转义&#34;&#34; \ [&#34;
此处报告的问题是使用了第三个反斜杠(\
),其中实际上是正斜杠(/
)。使用regexpr("\\/[^\\.]*$", Dir)
代替不会抛出任何错误。但是,它没有做到预期的事情,即它没有找到最后的正斜杠。这是因为这个正则表达式搜索没有任何点(.
)后面的正斜杠,实际上这个想法是搜索任何未跟随的正斜杠(更多)正斜杠。
因此,所描述的用例的正确正则表达式为regexpr("\\/[^\\/]*$", Dir)
。
Dir <- "10-30/No time line/folderNames.csv"
regexpr("\\/[^\\/]*$", Dir)
# returns 19