我正在寻找一种方法来调用不受.GlobalEnv
.
看看下面的两个函数:
y = 3
f1 = function(x) x+y
f2 = function(x) {
library(dplyr)
x %>%
mutate(area = Sepal.Length *Sepal.Width) %>%
head()
}
在这种情况下:
f1(5)
应该失败,因为y
没有在函数范围内定义f2(iris)
应该通过,因为该函数不会引用其范围之外的变量
f1
现在,我可以将and的环境覆盖f2
到baseenv()
or new.env(parent=environment(2L))
:
environment(f1) = baseenv()
environment(f2) = baseenv()
f1(3) # fails, as it should
f2(iris) # fails, because %>% is not in function env
或者:
# detaching here makes `dplyr` inaccessible for `f2`
# not detaching leaves `head` inaccessible for `f2`
detach("package:dplyr", unload=TRUE)
environment(f1) = new.env(parent=as.environment(2L))
environment(f2) = new.env(parent=as.environment(2L))
f1(3) # fails, as it should
f2(iris) # fails, because %>% is not in function env
有没有办法覆盖函数的环境,使其必须自给自足,但只要它加载自己的库,它也总是可以工作?