【发布时间】:2015-04-11 01:07:17
【问题描述】:
这是我的代码
pulse <- round(rnorm(22, 70, 10 / 3)) + rep(c(0, 5), c(10, 12))
group <- rep(c("A", "B"), c(10, 12))
tapply(pulse, group, length)
A B
10 12
list<-split(pulse,group)
sapply(list,length)
A B
10 12
identical(tapply(pulse, group, length),sapply(list,length))#FALSE
identical(tapply(pulse, group, length),as.table(sapply(list,length)))#FALSE
identical(tapply(pulse, group, length),as.vector(sapply(list,length)))#FALSE
identical(as.table(tapply(pulse, group, length)),as.table(sapply(list,length)))#TRUE
这两个函数产生相同的结果,但为什么它们不一样?我在 R 中使用了 typeof(),看来这两个结果的类型都是“double”。
为什么相同(tapply(脉冲,组,长度),sapply(列表,长度))是假的?如何调整我的代码以使它们相同?
谢谢。
【问题讨论】:
-
如果检查每个输出的
dput,一个具有.Names属性,而另一个是.Dimnames。通过删除属性,它将是相同的......即。 `完全相同(as.vector(r1), as.vector(r2))# [1] TRUE`其中v1、v2是tapply和sapply的输出。或者更改属性,即attributes(r1) <- attributes(r2); identical(r1, r2) -
非常感谢。原来这两种方法有不同的类。现在可以了。