我想要在我的包中的许多函数中使用未经修改的数据框。
我可以创建一个在需要时返回数据框的函数,例如
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,但这与大数据集有关,而不是像本例中的小数据集。