2015-10-08 125 views
2
W <- ecdf(c(1,2,3)) 
W 
O <- sum(W) 
W 

爲什麼這不起作用?我得到爲什麼我會收到錯誤「invalid type closure」?

Error in sum(W) : invalid 'type' (closure) of argument 

不明白的答案,其他類似的帖子,因爲我很新的這一點。我如何解決它?

+0

就像該錯誤消息是告訴你:該'W'對象是一個函數(帶有附加環境保存您傳遞給它的值)。如果你提供一個R函數一些值,它將返回值。這就是R的工作原理。你不會說你期望的是什麼,所以進一步的評論會是推測性的。 –

+0

w是一個函數呢?如何存儲函數w中的值來計算其元素的總和? – JoeDoe

回答

1

如果您不想爲W提供新值而與創建時使用的原始值不同,那麼您需要從環境中提取包含存在(和創建)的值的環境值打電話給ecdf的時間用....等待它.... environment功能。該ls函數將返回該環境中的內容的名稱:

str(W) 
#-------- 
function (v) 
- attr(*, "class")= chr [1:3] "ecdf" "stepfun" "function" 
- attr(*, "call")= language ecdf(1:11) 
#--------------- 
# Just asking to see that environment is less than satisfying 
    environment(W) 
#<environment: 0x3cd392588> 
# using `ls` is more informative 
ls(environment(W)) 
#[1] "f"  "method" "nobs" "x"  "y"  "yleft" "yright" 

遞送原始x值的總和:

> sum(environment(W)$x) 
[1] 6 

它可以顯示環境中的全部內容通過強迫到一個數據對象與as.list

> as.list(environment(W)) 
$nobs 
[1] 3 

$x 
[1] 1 3 5 

$y 
[1] 0.3333333 0.6666667 1.0000000 

$method 
[1] 2 

$yleft 
[1] 0 

$yright 
[1] 1 

$f 
[1] 0 
相關問題