【问题标题】:Navigate to a list of directories without using loop in r导航到目录列表而不使用 r 中的循环
【发布时间】:2021-05-12 06:23:06
【问题描述】:

我想导航到特定目录并处理在文件夹中找到的文件。我有许多模型 ('models') 和实验 ('exps') 组合,我想导航到它们的特定目录并对其中保存的数据进行处理。

我可以这样做:

models<- c("model1","model2","model3")
exps<- c("exp21","exp42","exp54")
for (g in 1:length(models)){
  gfilepath = file.path("C:/Users/Documents/data/models",models[g],"Netcdfs")
  for (r in 1:length(exps)){
    rfilepath =  file.path(gfilepath,exps[r])
    list.files(rfilepath)
#Do my processing here
  }
  
}

我可以在不使用循环的情况下执行此操作吗?我正在考虑尝试使用仅使用一个字符串向量来合并到文件路径中的应用:

test<-apply(c("model1","model2","model3"),function(x){
filename=file.path("C:/Users/Documents/data/models",x)
})

但我得到了:

Error in match.fun(FUN) : argument "FUN" is missing, with no default

我认为 'file.path' 会是函数?

是否可以通过另一种方式导航到特定文件夹(循环除外)?我认为也许在函数中使用递归选项可能会有所帮助,但我不确定。

【问题讨论】:

    标签: r loops apply


    【解决方案1】:

    可以使用?list.files访问的list.files的帮助文件包含您需要的参数,即recursive = T

    list.files(all.files = T, recursive = T)
    

    【讨论】:

    • 这将为我提供目录顶部文件夹中的所有文件(或我将工作目录设置到的任何位置),但我需要特定的文件路径组合才能为我提供仅用于该目录的文件夹一次一个特定的目录。例如,我需要C:/Users/Documents/data/models/model1/Netcdfs/exp21 中的所有文件,然后我需要从上面声明的向量中提取C:/Users/Documents/data/models/model1/Netcdfs/exp42 中的所有文件(modelexps
    • 我可以使用你的建议使用模式选项过滤掉我想要的文件,但它也会返回文件列表中的子目录名称?即list.files(all.files = T, recursive = T,pattern="exp21.nc",include.dirs = F) 返回一个文件列表,包括:dataexp21.nc 以及exp21/dataexp21.nc
    猜你喜欢
    • 2021-09-14
    • 2012-07-10
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2017-01-19
    • 2019-11-19
    • 1970-01-01
    相关资源
    最近更新 更多