Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r中的by()错误:找不到函数;“乐趣”;_R_Statistics - Fatal编程技术网

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

r中的by()错误:找不到函数;“乐趣”;,r,statistics,R,Statistics,我正在尝试对一个24级因子(说话人)进行t检验。我的目标是根据连续变量强度差(intdiff),看看正字法(两个等级:jj或L)之间是否存在显著差异。但是,在使用by()函数时,它返回以下错误: Error in FUN(X[[1L]], ...) : could not find function "FUN" 产生错误的语法是: by(data, data$speaker, t.test(intdiff~orthography)) 我根据R文档指定了参数,所以我不明白为什么它不接受我提供

我正在尝试对一个24级因子(说话人)进行t检验。我的目标是根据连续变量强度差(intdiff),看看正字法(两个等级:jj或L)之间是否存在显著差异。但是,在使用by()函数时,它返回以下错误:

Error in FUN(X[[1L]], ...) : could not find function "FUN"
产生错误的语法是:

 by(data, data$speaker, t.test(intdiff~orthography))
我根据R文档指定了参数,所以我不明白为什么它不接受我提供的函数。任何帮助都将不胜感激。如果您需要尝试重现问题,以下是我正在使用的数据集:

非常感谢。

这:
t.test(intdiff~正交法)
不是一个函数。您似乎希望
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(这是一个函数“名称”而不是函数“调用”),并且有一个用于t.test的公式方法。与参数名称的匹配接受部分名称,因此传递给
`.test
的数据帧应自动与'data'参数匹配。

如下:

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","")

请注意,其中一个扬声器只有一个正交法(speaker=f22s),这导致t.test失败,因此我将其删除。

by
正在查找函数名,而不是完整的函数,如
by(data,factor,mean)
。我不打算下载一个300+KB的文件。您应该使用小文件进行测试,并在此类示例中使用post dput()。
扬声器只有一个
正交法
级别
f22s
@DWin抱歉!我认为这是一个相当小的文件大小。我会在以后的帖子中记住这一点。谢谢。@SvenHohenstein是的。我刚才看到了。但这并不难解决。谢谢,谢谢。这解决了我的问题,我学到了一些新东西
apply
by
的约定是,传递给目标函数的未命名对象“粘住”(匹配)第一个否则不匹配的参数。它们有一个“dots”参数,其中包含“其他参数”,这些参数通过名称匹配。目标的帮助页用法部分是正确使用apply/by/tapply“functionals”的必要阅读资料。Hadley Wickham在他的草稿文本中有一个关于这个编程范例的有用的“Functionals”部分。
> 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