[英]Environment issues in R
只是為了澄清,我並不是說R存在問題。 問題可能就在我這一邊,但我真的很困惑。 我有一個創建函數a()
的函數( make_a()
a()
。 我還有一個在其定義中使用此函數的函數( fun_using_a()
):
make_a <- function(x) {
a <- function(y) {
x + y
}
a
}
fun_using_a <- function(x) {
a(x)/2
}
現在,我創建另一個使用這兩個函數:
my_fun <- function(x) {
a <- make_a(1)
fun_using_a(x)
}
調用my_fun(10)
會出現錯誤:
my_fun(10)
a(x)中的錯誤:找不到函數“ a”
但是,如果在全局環境中做基本上相同的事情,那么一切都可以正常工作:
a <- make_a(1)
fun_using_a(10)
[1] 5.5
這里發生了什么? 為什么my_fun(10)
引發錯誤? 看來我對R環境的理解一定有點離譜,但是我無法弄清楚。 當我調用my_fun()
,是否應該在第一行之后的執行環境中定義a()
函數,因此fun_using_a()
應該能夠在其中找到它(由於延遲評估)?
任何幫助將不勝感激。 非常感謝!
您需要將名稱為a
的make_a
結果保存在fun_using_a
可以看到的地方。 沒有一個“執行環境”,每個函數調用都會創建一個新的環境。 如前所述, make_a
返回一個函數,但是直到第二版代碼,您才顯示它被保存在任何地方。
順便說一句, make_a
可能有一個細微的錯誤:由於x
直到第一次調用a()
時才進行求值,因此其值可能會改變。 例如,
x <- 1
a <- make_a(x)
x <- 5
fun_using_a(10)
將返回7.5而不是5.5,因為a(y)
中x
的值將是5而不是1。要解決該問題,請在make_a
強制x
的值:
make_a_2 <- function(x) {
force(x)
a <- function(y) {
x + y
}
a
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.