R中的sappy():为什么返回输入?

R中的sappy():为什么返回输入?,r,R,为什么该代码: sapply(c(1, 3, 4, 0), print) 返回: [1] 1 [1] 3 [1] 4 [1] 0 [1] 1 3 4 0 为什么它也会返回输入?sapply()会返回打印值的向量,但首先会在调用时打印每个值。如果您看看这个例子,这可能会更清楚: > x <- sapply(1:4,print) [1] 1 [1] 2 [1] 3 [1] 4 > x [1] 1 2 3 4 > y <- sapply(1:4,function(x)

为什么该代码:

sapply(c(1, 3, 4, 0), print)
返回:

[1] 1
[1] 3
[1] 4
[1] 0
[1] 1 3 4 0
为什么它也会返回输入?

sapply()
会返回打印值的向量,但首先会在调用时打印每个值。如果您看看这个例子,这可能会更清楚:

> x <- sapply(1:4,print)
[1] 1
[1] 2
[1] 3
[1] 4
> x
[1] 1 2 3 4
> y <- sapply(1:4,function(x) x)
> y
[1] 1 2 3 4
> identical(x,y)
[1] TRUE
>x
[1] 1 2 3 4
>y y
[1] 1 2 3 4
>相同(x,y)
[1] 真的

这是因为
print
打印其参数(因此得名),但它也返回参数

> x <- print( 1 )
[1] 1
> x
[1] 1
>x
[1] 1

我们通常看不到
[1]1
,因为
print
不可见地返回其参数

嗯,我有点困惑这个例子是如何工作的,我想我理解了
apply
函数!这篇文章可能有助于分类应用函数的作用:我的示例只是说明,您看到的每个值都是单独打印的,因为这是
print()
函数的副作用。我不理解闭包投票。这个问题似乎完全清楚。大卫的解释和评论似乎完全正确。