我正在尋找一種方法來調用不受.GlobalEnv
中其他對象影響的函數。強制R函數調用是自給自足的
採取下面來看看兩個功能:
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
和f2
環境,無論是baseenv()
或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
有沒有辦法來覆蓋功能的環境,使其具有自給自足,但只要加載自己的庫,它也總是有效的?
只要是什麼? –
老實說,我只是不會編寫包含全局變量的函數 - 它似乎是一個意外錯誤的處方。 –
可能相關:https://stackoverflow.com/q/6216968/324364 – joran