Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将库加载到现有环境中(相当于“源”的“本地”参数)?_R - Fatal编程技术网

R 将库加载到现有环境中(相当于“源”的“本地”参数)?

R 将库加载到现有环境中(相当于“源”的“本地”参数)?,r,R,我正在将生产中的util函数外包到一个环境中,以封装(和分组)助手函数: 帮助文件: # File: Helper.R hello <- function() { print("Hello world") } #文件:Helper.R 您好您可以在中使用box::use()函数 然后,以下内容在本地附加一个包: box::使用(pkg[…]) 或者,您可以使用以下更简单的代码,并且可能更接近您实际想要做的事情: box::使用(pkg) 现在该包根本没有附加,其导出的对象可以通过

我正在将生产中的util函数外包到一个环境中,以封装(和分组)助手函数:

帮助文件:

# File: Helper.R
hello <- function() {
  print("Hello world")
}
#文件:Helper.R

您好您可以在中使用
box::use()
函数

然后,以下内容在本地附加一个包:

box::使用(pkg[…])
或者,您可以使用以下更简单的代码,并且可能更接近您实际想要做的事情:

box::使用(pkg)
现在该包根本没有附加,其导出的对象可以通过
pkg$obj
访问。这有点类似于base R的
loadNamespace
函数,但在幕后做得更多

最后,考虑不要把你的助手代码打包成一个包,而是把它作为一个模块来分发。这就是“box”包的设计目的:与其创建包,不如分发
helper.r
code文件(或文件夹),然后按如下方式使用它:

box::use(./helper)
有关详细说明,请参见软件包网站和。

另一种方式可以是:

# getNamespace returns the environment representing the name space name. The namespace is loaded if necessary.
# Internal function to support reflection on namespace objects!
env <- getNamespace("data.table")
cars <- env$as.data.table(mtcars)
#getNamespace返回表示名称空间名称的环境。如果需要,将加载命名空间。
#支持命名空间对象反射的内部函数!

env我发现了另一个名为
import
(类似于“模块”)的包,它允许将包导入到环境中:

该软件包也在CRAN上:

install.packages("import")
它允许导入一个包的选定、所有导出(“公共”)或所有(甚至未导出)功能

例如:

import::from(dplyr, arrange, .into = "datatools")

<> >代码>导入::从函数是一个方便的包装器,围绕<代码> GETSuxDealValue

< P>。添加到建议列表中,您也可以考虑使用CRAN上的包(注释我是作者)。当您的
Helper.R
文件包含以下内容时:

hello <- function() {
  print("Hello world")
}

hello很棒的软件包,特别是将函数注释作为帮助提供的功能(这是
source
无法做到的)。我希望
modules
包能够进入CRANsoon@RYoda不幸的是,它不是很快就完成了,而是以新名称“box”完全重写了包。另一种方法是将源代码导入命名空间(而不是环境),并使用
而不是
$
,但有一个问题没有令人满意的答案:
import::from(dplyr, arrange, .into = "datatools")
hello <- function() {
  print("Hello world")
}
helper <- modules::use("Helper.R")
helper$hello()