簡體   English   中英

R中的環境問題

[英]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()應該能夠在其中找到它(由於延遲評估)?

任何幫助將不勝感激。 非常感謝!

您需要將名稱為amake_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM