如何查找序列中的第一个现有文件

时间:2013-05-28 21:02:16

标签: r

我有几个位置可能包含我需要的文件。

我想在向量中找到第一个现有文件。

两个

find.existing.file <- function (files) {
  present <- which(file.exists(files))
  stopifnot(length(present) > 0)
  files[present[1]]
}

find.existing.file <- function (files) {
  for (i in 1:length(files))
    if (file.exists(files[i]))
      return(files[i])
  stop("None exist: ",paste(files,collapse=" "))
}

应该做我需要的。

然而,第一个版本检查所有文件而不是返回第一个现有文件,而第二个版本使用一个循环,我认为,它不是非常“R'y”。

我想知道我是否遗漏了一些明显的东西。

感谢。

2 个答案:

答案 0 :(得分:2)

此处使用正则表达式的另一个选项,list.files。我假设您在现有目录中搜索文件列表。

function(listfiles,path)
  length(grep(paste(listfiles,collapse='|'),
              list.files(path))> 0
在OP澄清后

编辑

要在多个位置搜索某个文件,您只能使用特定模式list.files。 例如,要在/ etc,/ usr / local / etc中搜索init文件:

list.files(path= c('/etc','/usr/local/etc'),
           pattern='init.*')

答案 1 :(得分:1)

这看起来"functional"足够了:

find.existing.file <- function (files)
  Find(file.exists,files,nomatch=stop("None exist: ",paste(files, collapse=" ")))