包含从外部文件中运行的源代码R

问题描述:

我有一个标准的数据分析程序,我需要在各种(〜50个数据集)上运行。我一直在开发它一段时间,现在我已经到了想要将它变成一个函数,该函数需要一个数据集并为每个数据集吐出一些合理的表。但是,完成的过程跨越了四个脚本文件,到目前为止,我已经使用source从一个到另一个来运行它,但似乎function似乎不可能。包含从外部文件中运行的源代码R

我有以下问题:

foo <- function(data) { 
    a <- somevariable 
    source("..somefile..") #The code in there uses a, but a is not in the workspace... 
    .. 
    continue 
    .. 
} 

当你对数据集运行的代码崩溃。

有没有一些方法(命令),只是在编译时从其他文件中复制粘贴命令(不知道我怎样称呼它不同,即使它不是真正的编译)该函数?我知道我可以自己复制粘贴它,但我宁愿不要,因为各种步骤包括神经网络和ARFIMA估计,为了代码的可读性,我想保留在单独的文件中。反正该函数将复制粘贴后是这样的200行代码,这绝对不是用户友好的...

THX

+0

为什么不把你当前的'source'文件作为函数的参数?听起来好像你已经接近需要将事物形式化为执行特定任务的函数的地步,并且可能从中创建一个小包(或者至少获取所有函数,然后在其他函数中使用它们)。 – 2013-02-20 14:41:11

+0

不,它只是一个目的代码,使得包没有用处,我已经做了一个非常大的包来做这个分析。 ;)R中是否存在仅包含编译文本的函数? – krhlk 2013-02-20 14:47:44

+0

我不完全确定你的意思是'只包含一些编译文本'。当然有函数包含文本块传递给另一个函数,或者将文本块写入文件,如html文件。 – 2013-02-20 14:52:38

我建议用一个小例子开始,所以你得到的感觉是什么编写函数需要如何使用source()将函数加载到R中,如何使用参数以及如何调用函数。这样做之后,它将有希望更明显的下一步去哪里。为了回答你的问题,如果你的脚本包含了200行代码并且只做了一件事(即它只执行一个功能),那么你应该考虑将它封装到函数中,是的。这实际上会增加用户的友好性,而不是减少它,因为你的脚本现在只能包含一行(函数调用)而不是原来的200行代码。

+0

是的,我可以重写它作为一个函数,但它会花费很多时间,我想知道是否存在仅包含文本的命令? – krhlk 2013-02-20 14:49:47

+0

我不认为一旦你知道如何和那是你想学习的技能,它会花费很多时间:),但是如果你认为source()是用来从你的函数内的另一个文件运行代码的话这在某种程度上更容易。 – seandavi 2013-02-20 16:15:05

我猜在这里,但这样的事情:

myfunc <- function() { 
if (something) source("path to script") 
} else { 
if (another thing) source("path to another script") 
} 
Do calcs and return the result 
} 

还是路径脚本可能是函数的参数。