假设我有一个很小的(3-4行)函数,我倾向于使用很多.
由于它很小,很容易将其复制粘贴到需要它的每个源文件中,但复制粘贴不是一种可维护的代码重用形式.
相反,我想将此函数放在自己的文件中,并根据需要以某种方式从其他源文件中导入它.
到目前为止,我发现只有两种方法可以做到这一点:
library(myfunction);source("path/to/my/function.R").(对于我想到的简单用例,第一个选项对我来说非常苛刻.目前,我不打算将此功能提交给CRAN,甚至不与其他任何人分享.我只想要要做的是从我的一次性R脚本中使用它.)
还有其他方法可以做到这一点吗?
例如,在Python中,我可以将tiny函数放在某个文件中:
# hello.py
def hello():
print "hello, world"
Run Code Online (Sandbox Code Playgroud)
...并将此文件放在我的PYTHONPATH变量的目录中.然后,要在任何脚本中使用该功能some_script.py,我需要做的就是
# some_script.py
import hello
hello.hello()
# hello, world
Run Code Online (Sandbox Code Playgroud)
我基本上是在寻找与R中最接近的相同的东西.
您可以将它添加到您的,~/.Rprofile并在那里定义它.
另外:一个地方,总是来源,甚至可以通过if (interactive())等等来控制.比工作包更少的工作.
减:全球可见度.
我想你可能会惊喜地发现为自己个人使用包装是多么简单.请记住,即使远程满足CRAN的要求,您也可以构建和安装软件包.
出于好奇,我在我的机器上构建了一个可在不到五分钟内完成的软件包.它只有一个功能.
这就是我做的.
在RI跑
package.skeleton(name = "OneFunc", path = [package_path])
Run Code Online (Sandbox Code Playgroud)
接下来,我[package_path]/R在我的函数定义中创建了一个.R文件.明确地说,这正是我的文件中包含的内容.
my_useful_function <- function(x){
x^2
}
Run Code Online (Sandbox Code Playgroud)
然后我回到R跑了
devtools::install_local([package_path])
library(OneFunc)
my_useful_function(3)
Run Code Online (Sandbox Code Playgroud)
它返回了值9.
因此,您可以快速创建一个脏包,这样可以非常轻松地加载一个(或多个)函数,而无需完成构建适合CRAN的包的所有工作.
好处:
library(OneFunc)代码.所以至少有一些迹象表明你已经做了一些事情.source,你不必每次都回忆起目录(只有当你重新安装包时)OneFunc就是将文件放在R子目录中并重新安装软件包.缺点:
library它加载了一个软件包,它会向其他人看,就像应该有文档一样.老实说,我更喜欢这个功能,因为它出现在你的身上/.Rprofile,但这是一个偏好问题.但是说真的,我写这个响应花了三倍的时间来制作裸骨包.我想你会觉得值得你这么做.
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |