1

我一直在做一些我认为很简单的事情——对数据框进行子集化,然后从几个测试中打印一些输出,在类别中重复

本着避免 for 循环的精神,我尝试了 lapply 但它似乎用 anova 覆盖了单向

我也试过 dlply,它不运行。

library(plyr)

dat<-data.frame(value=rnorm(300),
                    aCategory=rep(1:3, c(100, 100, 100)),
                    bCategory=rep(1:2, 300)
                    )

aFunc<-function(cat){
  sub<-subset(dat, aCategory=="cat")
  oneway.test(value~bCategory, dat)
  summary(aov(value~bCategory, dat))
}

lapply(unique(dat$aCategory), aFunc)

dlply(dat, .(aCategory), summarise, 
      oneway.test(value~bCategory),
      summary(aov(value~bCategory))
      )

谁能指出我正确的方向?

谢谢

4

1 回答 1

2

一个函数只能有一个返回值。试试这个:

aFunc<-function(cat){
  #sub<-subset(dat, aCategory==cat)
  #help(subset) warns against using subset inside functions
  sub <- dat[dat$aCategory==cat,]
  list(oneway.test(value~bCategory, sub),
       summary(aov(value~bCategory, sub)))
}

lapply(unique(dat$aCategory), aFunc)

在这里,我必须更正一些错误,例如实际使用子集进行测试并与值进行比较,cat而不是与字符串进行比较"cat"

请注意,这lapply仍然是一个循环。

于 2013-03-19T12:41:38.383 回答