包中的功能是否共享相同的子功能?

时间:2017-12-20 16:10:01

标签: r r-package roxygen2

我试图理解这个包( _________ | | | |1 | 2 | |__|______| | 3 | 4 | |____|____| ,在这里找到:https://github.com/hrbrmstr/darksky)是如何工作的。

它包含R文件夹中的这两个脚本:

  1. darksky
  2. aaa.R
  3. 前者(get-current-forecast.R)包含一个名为aaa.R的子功能。这是后者(convert_time)调用的,似乎有效但get-current-forecast.R未导入/ {refferred aaa.R

    这是如何工作的?所有子功能是否可用于同一包装中的其他功能?

1 个答案:

答案 0 :(得分:2)

套餐与在交互式会话中获取R文件的工作方式相同。包中每个.R文件中定义的所有函数都在包的命名空间中注册,该命名空间在运行library(foo)时附加。因此,当包中的函数调用其他函数时,R首先在该包的命名空间中查找该名称的函数。

但是,在另一个函数内定义的函数是不同的。 R不会在包名称空间中看到并注册它们。它们仅在封闭功能中可用。

例如,

foo <- function(x){
  y <- x+1
  bar <- function(z){
    z+1
  }

  bar(y)
}

如果在包中的某个.R文件中定义了foo,则函数foo将可见,但bar仅在foo内可见。