合并并从另一个脚本运行多个R脚本

whitzsjs  于 2023-10-13  发布在  其他
关注(0)|答案(5)|浏览(114)

从本质上讲,我已经用R构建了一个相当大的预测模型,大约有10~15个单独的脚本文件用于收集,排序,分析和呈现我的数据。我不想把所有东西都放进一个巨大的脚本文件中,我想保持一定程度的模块化,并从一个控制脚本或某种类似的控制机制中运行每一部分,就像我以前在matlab中所做的那样。这在R中可能吗?
我读过这个帖子以及它的相关帖子,但找不到这个确切的答案。Organizing R Source Code

o2g1uqev

o2g1uqev1#

我认为你只是在寻找source函数。请参见?source。我经常有一个主脚本,其中source其他.R文件。例如:

source("path/load_data.R")
source("path/analysis.R")
wr98u20j

wr98u20j2#

我是一个新的开发人员,我用一个对我有用的例子来回答,因为没有人给过一个例子。使用source(“myscript.R”)调用另一个R脚本“myscript_A.R”或“myscript_B.R”的示例如下-

if(condition==X){
    source("myscript_A.R")
}else{
    source("myscript_B.R")
}
wlp8pajw

wlp8pajw3#

我已经做了你所描述的,并将代码块分割成单独的R文件,并一直在运行源代码(这个)和源代码(那个),但我一直在痛苦地学习,源函数(而不是子例程/脚本文件)是更好的方式。
这里有3个可能的原因,为什么我们可能已经开发了他们的脚本,并坚持它,和3个原因,为什么切换到函数是有意义的:
1.我们希望在脚本出错时直接进行调试(能够在单个全局环境中跟踪所有变量及其状态)。

  • 我现在意识到RStudio的调试器/回溯是一种更好的进行真正调试的方法。

2a)我们不知道哪些变量需要保留以供以后使用(不想跟踪哪些变量要放入函数中,哪些变量要从函数输出)

  • 函数帮助我们明确脚本的一部分中使用了什么,什么没有使用,以及脚本的一部分中必须保留什么,因为没有必要输出它的每个部分。变量最好只保存在需要它们的环境中,而不是所有传入和传出全局环境的东西。
  • 另外,我认为环境可以充当列表,所以我认为有可能将整个环境放入函数中并取出??需要对此做更多的阅读/学习。

2b)我们有大量的变量(参数/变量,设置,数据的不同部分),所以把所有东西都塞进和塞出函数是不切实际的。

  • 有了像列表这样的结构,我们可以将变量的类别集中在一起,并将它们发送到函数中。函数也可以返回列表(而不是变量)。

相关Q&A:

欢迎其他人的评论!

jogvjijk

jogvjijk4#

您可以从以下文件夹中获取所有.R脚本:

# Load tidyverse
library(tidyverse) # to pipe (%>%) and map across each file

# List files and source each
list.files("path_to_folder", full.names = TRUE) %>% map(source)

在这里,您列出了一个文件夹中的所有文件,然后Map到source()函数。
如果每个脚本都包含一些函数,并且您希望在master_script中使用这些函数,则此解决方案更有用。

insrf1ej

insrf1ej5#

虽然我理解您对模块化的需求,但为什么不简单地为感兴趣的运行创建一个脚本呢?提供多个脚本会导致无法在脚本之间传递变量的复杂性,除非您写入文件(这会浪费CPU周期)。您甚至可以构建一个主脚本,它将读取每个脚本的文本内容,然后创建主脚本并运行该脚本。

相关问题