1

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

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

两个都

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”。

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

谢谢。

4

2 回答 2

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.*')
于 2013-05-28T23:04:02.463 回答
1

这看起来足够“实用” :

find.existing.file <- function (files)
  Find(file.exists,files,nomatch=stop("None exist: ",paste(files, collapse=" ")))
于 2013-05-28T21:20:41.567 回答