• R语言
  • mapply能实现,apply实现不了?

有一份1000X10(data)的临床数据,对应一份1000X1的分类变量(group),需要对每列进行分组检验是否有组间差异。使用kruskal.test批量操作时时发现用apply无法传入两组数据:
可以使用kruskal.test(data[,1] ~ group)进行单个变量的分组检验,但是
apply(data, 2, kruskal.test)不行,因为传入不了分类变量group
可是又可以用mapply实现:
mapply(kruskal.test, data. MoreArgs=list(group))
是不是没法用apply,只能用mapply实现批量操作啊?

谢谢~

apply系列函数应该大部分都能在FUN后面传参数进来的,随便捏了个例子试了下

x <- c(
  c(2.9, 3.0, 2.5, 2.6, 3.2), # normal subjects
  c(3.8, 2.7, 4.0, 2.4),      # with obstructive airway disease
  c(2.8, 3.4, 3.7, 2.2, 2.0) # with asbestosis
)
data <- matrix(rep(x, 10), ncol = 10)

group <- factor(
  rep(1:3, c(5, 4, 5)),
  labels = c(
    "Normal subjects",
    "Subjects with obstructive airway disease",
    "Subjects with asbestosis"
  )
)

apply(data, 2, kruskal.test, g = group)

    meeeeeeeeo 多谢大佬!看了大佬的最后一行代码突然醒悟了,开始一直被apply(data, margin, fun, ...)kruskal.test(y ~ group, data= data)误导了,以为apply函数只能传入一个数据y,而kruskal.test需要两组数据,一组是待检验的向量y,一组是对应的分类变量group。其实把分类变量group也当成kruskal.test的参数写入apply就行了apply(y, 2, kruskal.test, group)。。。。。