Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.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,我正在构建一个非常基本的R包供我自己使用 有些文件需要另一个文件中的函数 因此,R文件尝试源代码为R文件。这在构建过程中失败。都不是 source("./util.R") 也不是 工作。R找不到该文件 所有文件都在包的R目录中 如何调用该文件以确保找到它 谢谢,我认为包中不需要源代码(source),因为必须对您创建的对象进行某种“惰性评估”(只是解析),延迟评估,直到您真正调用包的函数(这是一个库=等待从外部调用的函数集合) Hadley Wickham在他的书的“顶级代码”部分解释了背景

我正在构建一个非常基本的R包供我自己使用

有些文件需要另一个文件中的函数

因此,R文件尝试源代码为R文件。这在构建过程中失败。都不是

source("./util.R")
也不是

工作。R找不到该文件

所有文件都在包的R目录中

如何调用该文件以确保找到它

谢谢,

我认为包中不需要源代码(
source
),因为必须对您创建的对象进行某种“惰性评估”(只是解析),延迟评估,直到您真正调用包的函数(这是一个库=等待从外部调用的函数集合)

Hadley Wickham在他的书的“顶级代码”部分解释了背景

为了测试这种行为,我使用RStudio创建了一个包,并添加了两个调用另一个文件函数的文件(如循环引用):

文件“f1.R”:

f1 <- function() {
  print("f1")
  f2()
}

f4 <- function(a) {
  print(paste("f4:", a))
}
# f2.R
f2 <- function() {
  print("f2")
}

f3 <- function(a) {
  print(paste("f3:", a))
  f4(a)
}

摘要:包中不需要
源代码
(直到您想在不构建包的情况下测试代码文件!)。

构建包时,包中的所有函数都可用于该包中的所有其他函数。您根本不需要在包中使用
源代码,真的。谢谢。我有点尴尬。当我尝试这样做时,我在importIntoEnv(pkgenv,exports,nsenv,exports)中遇到了
错误:无法向锁定的环境添加绑定
任何线索,这是怎么回事?您是否在新创建的包(哪个R版本?)中使用了我的示例代码,或者您使用了自己的代码和包?如果是后者,请提出一个新问题,包括一个最小的可复制示例。
# f2.R
f2 <- function() {
  print("f2")
}

f3 <- function(a) {
  print(paste("f3:", a))
  f4(a)
}
> library(testpackage)
> testpackage:::f1()  # ::: allows calling a hidden function that was not exported. You could also create a NAMESPACE file instead
[1] "f1"
[1] "f2"
> testpackage:::f3("hello")
[1] "f3: hello"
[1] "f4: hello"
>