R 简单但可维护的代码重用
假设我有一个很小的(3-4行)函数,我经常使用它 因为它很小,所以很容易将它复制粘贴到每个需要它的源文件中,但是复制粘贴不是一种可维护的代码重用形式 相反,我想把这个函数放在它自己的文件中,并根据需要从其他源文件导入它 到目前为止,我只找到了两种方法:R 简单但可维护的代码重用,r,R,假设我有一个很小的(3-4行)函数,我经常使用它 因为它很小,所以很容易将它复制粘贴到每个需要它的源文件中,但是复制粘贴不是一种可维护的代码重用形式 相反,我想把这个函数放在它自己的文件中,并根据需要从其他源文件导入它 到目前为止,我只找到了两种方法: 为my function创建一个R包,将其安装到my R库中,并运行客户端代码,例如库(myfunction) 让客户端代码执行source(“path/to/my/function.R”) (对于我心目中的简单用例,第一个选项让我印象非常深刻。
库(myfunction)
李>
source(“path/to/my/function.R”)
例如,在Python中,我可以将微小的函数放在某个文件中:
# hello.py
def hello():
print "hello, world"
…并将此文件放在myPYTHONPATH
变量的目录中。然后,要在任何脚本some_script.py
中使用该函数,我需要做的就是
# some_script.py
import hello
hello.hello()
# hello, world
我基本上是在R中寻找与此最接近的等价项。您可以将其添加到
~/.Rprofile
中,然后在那里定义它
另外:一个位置,总是源代码的,甚至可以通过if(interactive())
etc pp进行控制。比一个包的工作量少
负:全球可视性。我想你可能会惊喜地发现,制作一个供自己使用的软件包是多么简单。请记住,即使远程满足CRAN的要求,您也可以构建和安装软件包 出于好奇,我构建了一个可以在我的机器上运行的包,不到五分钟就完成了。它只有一个功能 这就是我所做的 在R我跑了
package.skeleton(name = "OneFunc", path = [package_path])
接下来,我在[package\u path]/R
中创建了一个.R文件,并将其放入函数定义中。明确地说,下面就是我的文件中包含的内容
my_useful_function <- function(x){
x^2
}
返回值9
因此,您可以快速创建一个脏包,这样就可以很容易地加载一个(或多个)函数,而无需构建一个适合CRAN的包
优点:
library(OneFunc)
。所以至少有迹象表明你做了些什么源代码
的工作量几乎不多,而且您不必每次都调用目录(仅在重新安装软件包时)OneFunc
中,只需将文件放到R子目录中,然后重新安装软件包库
加载了一个包,在其他人看来,它就像应该有文档一样。老实说,我更喜欢这个函数,而不是突然出现的函数,因为它在您的/.Rprofile
中,但这是一个偏好问题但说真的,我花了三倍的时间来写下这个回复,就像它花了三倍的时间来制作一个简单的软件包一样。我想你会觉得这是值得的。谢谢!但是,请看我的编辑。我有点惊讶它在没有指定
code\u文件的情况下为我运行,但却没有为您运行。查看文档,似乎我的环境中一定有什么东西被引入并防止了错误。对不起,我没能早点赶上。缺点很容易解决。编写一些简短的文档(以及良好的编码实践)并不困难,或者将其放入Rprofile:import
devtools::install_local([package_path])
library(OneFunc)
my_useful_function(3)