我有一个标准的数据分析程序,我需要在各种(~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行代码一样,这绝对不是用户友好的......
THX
答案 0 :(得分:1)
我建议从一个最小的例子开始,这样你就可以了解编写函数的内容,如何使用source()将函数加载到R中,如何使用参数以及如何调用函数。在这样做之后,希望更明显的去哪里。
要回答你的问题,如果你的脚本包含200行代码而且只做一件事(也就是说,它只做一个FUNCTION),你应该考虑将它包装到一个函数中,是的。这实际上会增加用户友好性而不是减少它,因为你的脚本现在只能包含一行(函数调用)而不是原始的200行代码。
答案 1 :(得分:0)
我猜这里,但是这样的事情:
myfunc <- function() {
if (something) source("path to script")
} else {
if (another thing) source("path to another script")
}
Do calcs and return the result
}
或者脚本的路径可以是函数参数。
答案 2 :(得分:0)
我理解你的问题,我假设你想使用函数source
在函数内部使用proc,所以你只需要添加参数local = T
#This is your source code
y<-x+1
#save in your favorite path as "your_path.R"
#Function where you will call the above code
your_function<-function(x){
source("your_path.R",local=T) #plus 1 to x. IMPORTANT: local=T
return(y)
}