R使用null函数

car*_*ose 5 r tapply

我无法了解什么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)

谢谢.

Iar*_*min 3

如果您使用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 并不意味着不存在某个因素组合。