我有几个位置可能包含我需要的文件。
我想在向量中找到第一个现有文件。
两个
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”。
我想知道我是否遗漏了一些明显的东西。
感谢。
答案 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=" ")))