我正在尝试将t检验应用于24个级别的因子(说话者)。我的目标是根据连续变量,强度差异(intdiff)查看拼写法(2级:jj或L)之间是否存在显着差异。但是,使用by()函数时,它返回以下错误:
Error in FUN(X[[1L]], ...) : could not find function "FUN"
我产生错误的语法是:
by(data, data$speaker, t.test(intdiff~orthography))
我根据R文档指定了参数,所以我无法弄清楚为什么它不接受我提供的功能。任何帮助将不胜感激。如果您需要尝试重现问题,这里是我正在使用的数据集:
https://www.dropbox.com/s/bxb9ebavln1rh3u/SpanishPalatals.csv
非常感谢提前。
答案 0 :(得分:3)
这:t.test(intdiff~orthography)
不是一个功能。您似乎期望by
拆分数据框,以便成功:
by(data, data$speaker, function(d){ t.test(d$intdiff ~ d$orthography, data=d)} )
进一步解释:function(d){ t.test(d$intdiff ~ d$orthography)}
是一个函数。或者你可以尝试:
by(data, data$speaker, t.test, form= intdiff ~ orthography ) # untested
第二个版本使用t.test(这是一个函数'name'而不是函数'call'),并且有一个t.test的公式方法。与参数名称的匹配接受部分名称,因此传递给`.test
的数据帧应自动匹配“数据”参数。
答案 1 :(得分:1)
以下内容:
ff <- function(spkr){
tt <- t.test(intdiff~orthography,data=df[df$speaker==spkr,])
p <- tt$p.value
return (c(as.character(spkr), p,
ifelse(p<0.01,"***",ifelse(p<0.05,"**",ifelse(p<0.1,"*","")))))
}
result <- sapply(unique(df$speaker),ff)
result <- data.frame(t(result))
colnames(result) <- c("speaker","p","")
使用您的数据集生成此内容:
> result
speaker p
1 f11r 0.274156477338993
2 f13r 0.713051221315941
3 f15a 0.572200487250118
4 f16a 0.192474372524439
5 f19s 0.071456754899202 *
6 f21s 0.172336984420981
7 f23s 0.00711798616059324 ***
8 f24s 0.875438396151962
9 f31s 0.0191665818354575 **
10 f35s 0.550666959777641
11 f36s 0.715870353562376
12 m09a 0.195488505334365
13 m10a 0.0083410071012031 ***
14 m12r 0.461148808729932
15 m14r 0.407116475315898
16 m17s 0.00147426201434577 ***
17 m18s 0.614243811131762
18 m20s 0.204627912633947
19 m25s 0.00652026971231048 ***
20 m26s 0.135705391035981
21 m27s 0.099118573524907 *
22 m28s 0.0789796806312655 *
23 m32s 0.27026239413494
请注意,其中一个扬声器只有1个拼写法(扬声器= f22s),导致t.test失败,所以我删除了它。