R逻辑(0)在申请中

R logical(0) in sapply

为什么

sapply(c(TRUE, FALSE, logical(0)), length)

return

[1] 1 1

也就是说,logical(0)怎么会被忽略?

查看逻辑函数帮助,你有:logical(length = 0)。您正在创建一个长度为 0(空)的逻辑对象

我不能评论所以我编辑。 这是因为 c(TRUE, FALSE, logical(0)) 是一个长度为 2 的对象,因为最后一个元素是空的。然后sapply returns一个长度为2的对象。

@PenelopeHopHop 说的是真的,但她没有解释错误。错误是从 c() 函数组合它的参数开始的,并且因为 logical(0) 是空的,所以它没有组合使得长度为 2 的 sappply 输入因此输出长度为 2.

c(TRUE, FALSE, logical(0))
#> [1]  TRUE FALSE

如果将c()替换为list()

可以实现什么
list(TRUE, FALSE, logical(0))
#> [[1]]
#> [1] TRUE
#> 
#> [[2]]
#> [1] FALSE
#> 
#> [[3]]
#> logical(0)
sapply(list(TRUE, FALSE, logical(0)), length)
#> [1] 1 1 0

而不是使用 sapply(..., length) 使用 lengths 功能,因为它可以实现您的目标。

lengths(list(TRUE, FALSE, logical(0)))
#> [1] 1 1 0