在自定义 R 包中包含内部和外部数据的正确方法

问题描述 投票:0回答:1

我正在创建一个 R 包,其中包含一些数据集,我希望导出这些数据集以供用户使用以及在包的函数内部使用。

例如,假设我创建了一个名为

measurements
的数据集,如下所示:

measurements <- data.frame(id = c(1:10), value = runif(10))
usethis::use_data(measurements, overwrite = TRUE)

这使得用户只需引用

measurements
就可以从外部访问测量数据帧。

现在,我还想编写一个内部使用相同数据框的封装函数:

#' fn_docalc
#' 
#' @param x Value to multiply by
#' 
#' @return Measurements dataframe multiplied by x
#' @export

fn_docalc <- function(x){
measurements$value <- measurements$value * x
measurements
}

这工作正常,但失败的一种情况是用户加载包,并且碰巧在全局环境中创建了自己的名为

measurements
的变量。 如果发生这种情况,则
fn_docalc
将对新的全局变量而不是包的变量进行操作。 即使存在不同的全局版本的
measurements
,如何正确编写函数/包以在调用
fn_docalc
时始终引用内部
measurements
变量?

r devtools r-package
1个回答
0
投票

在@NirGraham的帮助下,似乎您必须/应该显式定义所引用数据的名称空间。 在上面的示例中,以下函数定义解决了该问题:

fn_docalc <- function(x){
tmp <- myPkgName::measurements
tmp$value <- tmp$value * x
tmp
}

此外,我的实际用例是使用

get()
函数而不是直接引用变量。 在这种情况下相当于
tmp <- get("measurements")
。 解决这个问题的方法是包含
pos
参数,例如:
tmp <- get("measurements", pos = "package:myPkgName")

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.