【问题标题】:How can I run in R the same script from a parent folder to all sub-sub folders如何在 R 中运行从父文件夹到所有子文件夹的相同脚本
【发布时间】:2022-01-27 14:50:37
【问题描述】:

我有一个项目文件夹,其中包含 10 个子文件夹(每个采样站一个),每个站都有几个文件夹(因此项目中的子文件夹),其中包含不同采样日期的数据。

我需要为所有日期和电台的所有“species.txt”文件运行相同的脚本。

我在另一篇文章中找到了下一个代码,它帮助我为第一级子文件夹运行脚本,但我不知道如何让它为下一个级别运行。

parent.folder <- "C:/R_Files/Data/ProjectIO"
sub.folders <- list.dirs(parent.folder, recursive=TRUE)[-1]
r.scripts <- file.path(parent.folder, "speciesnames.r")
# Run scripts in sub-folders 
for(i in sub.folders) {
  setwd(i)
  source(r.scripts)
}

谁能给我一个提示?

谢谢

SG

【问题讨论】:

  • 你的问题太宽泛了。不幸的是,我们不知道文件夹结构,也无法重现您的示例。从您的描述来看,您在子文件夹中有数据文件。如果是这样,我建议将它们全部加载到一个 R 脚本中,然后进行分析。
  • list.dirs(parent.folder) 为您提供每个目录和子目录的列表。这不是您要找的吗?
  • 您将如何处理这些采样日期?如果speciesnames.R 包含codem,并且您必须从子文件夹中调用每个采样数据文件,我会考虑list.files(path = parrent.folder, pattern = ".dat", full.names = TRUE, recursive = TRUE)
  • 嗨,我已经更新了一个关于文件如何分发的架构,这可能解释得更好一些?

标签: r recursion subdirectory rscript


【解决方案1】:

我不知道 1:n 脚本运行什么操作,但这里有一种方法可以找到所有名为 species.txt 的文件,导入 .txt 文件(代码假定它在 .txt 文件中,可以被读入任意数量的子文件夹中的 df)。

父脚本被获取 n 次,其中 n = 导入到 species_list 的文件数。

parent_script = "parent.R"

vector_species = list.files(full.names = TRUE, recursive = TRUE, pattern = "species\\.txt$")

specist_list <- map(vector_species, rio::import)

lapply(specist_list, function(x){
  species <<- x
  
  source(parent_script)
  })

parent.R-脚本使用在lapply 中创建的物种对象。 &lt;&lt;- 使物种对象在 lapply 函数的命名空间之外可用。

# parent.R
head(species)

注意:在我的设置中,工作目录是相对于项目文件夹的根目录的。

【讨论】:

  • 您好,谢谢,但我只想要一个位于父文件夹中的脚本,该脚本针对所有名为“species.txt”的文件
  • 您是否有一个 (1:n) 脚本要为每个 species.txt 运行 n 次,或者您是否为每个 species.txt 文件运行一个脚本 (n:n )?
  • 第一个,我有一个脚本可以为每个物种运行多次.txt
  • 我已经编辑了我的答案。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多