r中的by()错误:找不到函数“FUN”

时间:2013-12-01 20:21:05

标签: r statistics

我正在尝试将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

非常感谢提前。

2 个答案:

答案 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失败,所以我删除了它。