我应该如何使用特殊环境在包中的函数之间传递数据帧

时间:2016-02-03 04:41:46

标签: r

我想要在我的包中的许多函数中使用未经修改的数据框。

我可以创建一个在需要时返回数据框的函数,例如

lookup <- function() return(data.frame(id=c(1,2,3),text=c("Alpha","Beta","Gamma")))}

test <- function() {
  print(lookup())
}

或者我可以写一个全局变量

lookup <<- data.frame(id=c(1,2,3),text=c("Alpha","Beta","Gamma"))

test <- function() {
  print(lookup)
}

或者我可以在main函数中创建数据框并将其传递给需要它的每个函数。

main <- function() {
  lookup <- data.frame(id=c(1,2,3),text=c("Alpha","Beta","Gamma"))
  test(lookup)
}

test <- function(lookup) {
  print(lookup)
}

选项一感觉不对,因为每次调用函数时我都会从头开始重新创建数据框。

选项二是不好的做法,因为包不应该依赖全局变量,因为调用者可能自己使用该变量。

选项三是否是正确的方法,并且只是按功能语言设计的方式?

或者有没有办法让我不需要将数据帧传递给被调用的函数?一些神奇的环境可能涉及?即我可以在特殊环境中创建数据框,然后在不传递函数的情况下引用该函数中的环境吗?

这样的事情:

main <- function() {
  lookup <- data.frame(id=c(1,2,3),text=c("Alpha","Beta","Gamma"))
  my_special_enviroment <- add(lookup)
  test()
}

test <- function() {
  print(my_special_environment.get(lookup))
}

由于

注意,我发布了一个类似的问题here,但这与大数据集有关,而不是像本例中的小数据集。

0 个答案:

没有答案