这是我的代码
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(列表,长度))是否为假?如何调整我的代码以使它们相同?
谢谢。
答案 0 :(得分:1)
如果我们检查每个输出的str
str(r1)
# int [1:2(1d)] 10 12
#- attr(*, "dimnames")=List of 1
# ..$ : chr [1:2] "A" "B"
str(r2)
# Named int [1:2] 10 12
# - attr(*, "names")= chr [1:2] "A" "B"
attributes
之间有所不同。一种方法是删除每个输出的attributes
,它们将是相同的
identical(as.vector(r1), as.vector(r2))
#[1] TRUE
但是,as.vector
也会移除names
。如果我们需要保留names
部分,请使输出attributes
相同
attributes(r1) <- attributes(r2)
identical(r1, r2)
#[1] TRUE
,其中
r1 <- tapply(pulse, group, length)
r2 <- sapply(list,length)