R包中的源文件

时间:2015-12-29 23:02:42

标签: r

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

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

因此R文件尝试获取R文件。这在构建期间失败。既不

source("./util.R")

,也不

source ("util.R")

的工作。 R无法找到该文件。

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

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

谢谢,

1 个答案:

答案 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(除非您之前想要测试代码文件而不构建软件包!)。