W <- ecdf(c(1,2,3))
W
O <- sum(W)
W
为什么这不起作用?我得到了
Error in sum(W) : invalid 'type' (closure) of argument
由于我还比较新手,所以对其他类似帖子的答案并没有完全理解。我该如何修复它?
ecdf
函数实际上是一个函数式的,也就是说,它的值是另外一个函数。在 R 语言中,我们所谓的“函数”实际上是“闭包”。它们有一个主体,即代码块,可以通过键入函数名来轻松查看。但是,它们还有一个“环境”,其中包含在闭包创建时定义的变量的本地值。environment
函数从环境中提取在调用 ecdf
时存在(并创建)的值。 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"
> 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
W
对象是一个函数(带有附加环境,保存了您传递给它的值)。如果您向R函数提供一些值,它将返回值。这就是R的工作方式。由于您没有说明您的期望,因此进一步的评论将是推测性的。 - IRTFM