为什么我收到错误“无效类型关闭”?

时间:2015-10-08 18:38:32

标签: r closures

W <- ecdf(c(1,2,3))
W
O <- sum(W)
W

为什么这不起作用?我得到了

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

我不太了解其他类似帖子的答案,因为我对此很陌生。我该如何解决?

1 个答案:

答案 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