R - 找到文件的位置

时间:2018-01-11 14:55:45

标签: r

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

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

setwd(list.files(fileName))无效

问题:

  1. 是否有任何函数可以提供文件夹,所以我不必创建包装函数?

  2. 如何找到最后一个" /"在一个字符串中。我和regexpr("\\\[^\\.]*$", Dir)一起玩,并且一直出错。

  3. 非常感谢任何答案或反馈。

    代码:

    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。

2 个答案:

答案 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