W <- ecdf(c(1,2,3))
W
O <- sum(W)
W
为什么这不起作用?我得到了
Error in sum(W) : invalid 'type' (closure) of argument
我不太了解其他类似帖子的答案,因为我对此很陌生。我该如何解决?
答案 0 :(得分:2)
ecdf
函数实际上是一个函数,即它的值是另一个函数。在R中我们称之为&#34;功能&#34;是真的&#34;关闭&#34;。它们的主体是通过键入函数名称很容易看到的代码块。但是,它们还有一个环境,它带有在闭包创建时定义的变量的本地值。
如果您不想为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