我无法了解什么tapply时候该函数的FUN参数是null.
该文件说:
如果FUN为NULL,则tapply返回一个向量,该向量可用于下标tapply正常生成的多路数组.
例如,下面的文档示例是做什么的?
ind <- list(c(1, 2, 2), c("A", "A", "B"))
tapply(1:3, ind) #-> the split vector
Run Code Online (Sandbox Code Playgroud)
我不明白结果:
[1] 1 2 4
Run Code Online (Sandbox Code Playgroud)
谢谢.
如果您使用tapply指定的函数(非 NULL)运行,例如sum,就像帮助中一样,您将看到结果是一个二维数组,NA其中一个单元格为:
res <- tapply(1:3, ind, sum)
res
A B
1 1 NA
2 2 3
Run Code Online (Sandbox Code Playgroud)
这意味着不存在一种因素组合,即 (1, B)。当FUN为NULL时,它返回与所有存在的因子组合相对应的向量索引。要检查这一点:
> which(!is.na(res))
[1] 1 2 4
Run Code Online (Sandbox Code Playgroud)
值得一提的是,指定的函数可以返回 NA 本身,如下面的玩具示例所示:
> f <- function(x){
if(x[[1]] == 1) return(NA)
return(sum(x))
}
> tapply(1:3, ind, f)
A B
1 NA NA
2 2 3
Run Code Online (Sandbox Code Playgroud)
因此,一般来说,NA 并不意味着不存在某个因素组合。