【发布时间】:2013-02-20 14:29:32
【问题描述】:
我有一个标准的数据分析程序,需要在各种(约 50 个数据集)上运行。我已经开发了一段时间,现在我想把它变成一个函数,它接受一个数据集并为每个数据集吐出一些合理的表。然而,完成的过程跨越了四个脚本文件,到目前为止我已经使用source从一个到另一个运行它,但似乎function似乎是不可能的。
我有以下问题:
foo <- function(data) {
a <- somevariable
source("..somefile..") #The code in there uses a, but a is not in the workspace...
..
continue
..
}
代码在数据集上运行时崩溃。
是否有某种方式(命令)可以在编译时从其他文件中复制粘贴命令(不知道如何以不同的方式调用它,即使它不是真正的编译)函数?我知道我可以自己复制粘贴它,但我不想这样做,因为各种步骤包括神经网络和 ARFIMA 估计,为了代码的可读性,我想将它们保存在单独的文件中。无论如何,复制粘贴后的功能将类似于 200 行代码,这绝对不是用户友好的...
谢谢
【问题讨论】:
-
为什么不把你当前
source的文件作为函数的参数呢?听起来您确实已经接近需要开始将事物形式化为执行特定任务的函数的地步,并且可能从中构建一个小包(或者至少获取所有函数,然后在其他函数中使用它们)。 -
不,它只是一个目的的代码,制作包没有用,我已经做了一个很大的包来做这个分析。 ;) R 中是否存在仅包含一些编译文本的函数?
-
我不完全确定您所说的“仅包含一些关于编译的文本”是什么意思。当然有些函数包含要传递给另一个函数的文本块,或者将文本块写入文件,如 html 文件。
-
啊,你有一个范围界定问题比什么都重要。
..some file..需要编写为函数,以便可以替换参数并且不必在所有上下文中具有相同的名称。很明显,源函数的环境与调用函数的环境不同,否则你不会得到你所做的错误。修复环境问题将比硬着头皮将源脚本重写为函数更费力,也更容易出错。 -
我想另一种选择是将所有内容放在
Rnw文件中并使用sweave或knitr进行分析(无需采购,只需在代码块中包含完整代码)。如果重要的话,这样做的好处是能够写出漂亮的报告和图表。
标签: r scoping reproducible-research