我正在构建一个非常基本的R包供我自己使用。
某些文件需要另一个文件中的函数。
因此R文件尝试获取R文件。这在构建期间失败。既不
source("./util.R")
,也不
source ("util.R")
的工作。 R无法找到该文件。
所有文件都在包的R目录中。
如何调用文件以确保找到它?
谢谢,
答案 0 :(得分:2)
我认为在一个包中不需要采购(source
),因为必须有一个"懒惰的评估"您创建的对象延迟评估,直到您真正调用包的函数(这是一个库=等待从外部调用的函数集合)。
Hadley Wickham在他的书R packages的第34页"顶级代码"中解释了背景。
为了测试这种行为,我使用RStudio创建了一个包,并添加了两个调用另一个文件的函数的文件(如循环引用):
文件" f1.R":
f1 <- function() {
print("f1")
f2()
}
f4 <- function(a) {
print(paste("f4:", a))
}
文件&#34; f2.R&#34;:
# f2.R
f2 <- function() {
print("f2")
}
f3 <- function(a) {
print(paste("f3:", a))
f4(a)
}
RStudio从中创建一个(源)包没有问题。
我也可以加载包,调用函数,结果如预期的那样:
> 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"
>
摘要:软件包中不需要source
(除非您之前想要测试代码文件而不构建软件包!)。