繁体   English   中英

R-查找文件的位置

[英]R - Find the location of the file

下面是我创建的用于查找文件位置的包装函数。 该功能有效,但是我想知道是否有比此更简单的解决方案。

此功能的目的是查找文件的文件夹。 由于list.files返回目录和文件名,因此我不能将其用作setwd()的输入。

setwd(list.files(fileName))将不起作用

问题:

  1. 有没有可以提供文件夹功能的函数,所以我不必创建包装函数?

  2. 如何找到字符串中的最后一个“ /”。 我玩了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM