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

时间:2014-08-12 20:06:15

标签: r rstudio organization

基本上,我在R中构建了一个相当大的预测模型,其中包含大约10~15个单独的脚本文件,用于收集,排序,分析和显示我的数据。我想保持一定程度的模块化,并从控制脚本或某种可比较的控制机制运行每个部分,而不是像以前在matlab中所做的那样。这可能在R?

我已经读过这个帖子以及它的相关主题,但是找不到这个确切的答案。 Organizing R Source Code

5 个答案:

答案 0 :(得分:13)

我认为你只是在寻找source功能。见?source。我通常有一个主脚本source其他.R个文件。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

我已经完成了您所描述的工作,并在单独的R文件中拆分了代码块,并一直在运行source(this)和source(that),但是我一直在痛苦地学习该源函数(而不是子例程/脚本)文件)是更好的选择。

以下是我们可能以这种方式开发并坚持使用脚本的3个可能原因,以及切换到函数才有意义的3个原因:

1)我们想在脚本出错时直接进行调试(能够在单个全局环境中跟踪所有变量及其状态)。

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

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

  • 函数有助于迫使我们明确说明脚本的一个部分中使用了哪些内容,以及未使用的内容,以及保留一部分脚本所必需的内容,因为不必输出脚本的每个部分。最好将变量仅保留在所需的环境中,而不是将所有传入和传出全局环境的变量保存在其中。
  • 此外,我认为环境可以充当列表,因此我认为可以将整个环境放入函数中?需要对此进行更多的阅读/学习。

2b)对于所有内容(参数/变量,设置,数据的不同部分),我们都有大量的变量,因此将所有内容填充到功能中和填充功能是不切实际的。

  • 通过类似列表的结构,我们可以将变量类别集中在一起,并将其发送到函数中。函数还可以返回列表(而不是变量)。

相关SO:

答案 3 :(得分:0)

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

答案 4 :(得分:0)

您可以从文件夹中获取所有 .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)

在这里,您列出文件夹中的所有文件,然后映射 source() 函数。

如果每个脚本都包含一些函数,并且您希望在 master_script 中使用这些函数,则此解决方案更有用。