• R语言
  • 如何用ddply返回对应的p.value

不废话:

<br />
#这是数据,大家可以直接COPY进R中。。。<br />
dat <- data.frame(geneA=c(387.7,401.2,595.8,508.0,512.5,552.0),geneB=c(283.8,255.5,370.1,190.1,174.5,186.8),geneC=c(83.4,96.2,104.0,65.5,57.3,57.8),Stress=c("CK","CK","CK","Cold","Cold","Cold"))<br />
dat<br />
  geneA geneB geneC Stress<br />
1 387.7 283.8  83.4     CK<br />
2 401.2 255.5  96.2     CK<br />
3 595.8 370.1 104.0     CK<br />
4 508.0 190.1  65.5   Cold<br />
5 512.5 174.5  57.3   Cold<br />
6 552.0 186.8  57.8   Cold<br />
library(plyr)<br />
ddply(dat,"Stress",summarise,avg_geneA=mean(geneA),avg_geneB=mean(geneB),avg_geneC=mean(geneC))<br />
  Stress avg_geneA avg_geneB avg_geneC<br />
1     CK  461.5667  303.1333  94.53333<br />
2   Cold  524.1667  183.8000  60.20000<br />
# my opinion: 错的,给大家我的想法。。。<br />
ddply(dat,"Stress",summarise,avg_geneA=mean(geneA),<br />
p_geneA=function(x) {<br />
value <-t.test(x,subset(dat,select=geneA,Stress=="CK")$geneA,alternative="two.sided")$p.value;<br />
return(value)}),<br />
avg_geneB=mean(geneB),<br />
avg_geneC=mean(geneC))<br />
#我只算了geneA的pvalue<br />


我希望数据最后的输出是:
<br />
  Stress avg_geneA avg_geneB avg_geneC p_geneA p_geneB   p_geneC<br />
1     CK  461.5667  303.1333  94.53333     1.0     1.0     1.0<br />
2   Cold  524.1667  183.8000  60.20000     0.2     0.4     0.8<br />


希望大家帮忙想想~~~

上面我的代码更改了一下,出现了Error in output[[var]][rng] <- df[[var]] :

incompatible types (from closure to logical) in subassignment type fix的错误,这是咋一回事呢。。。

我代码错误一是数值类型不对,二是每次算p.value都要重新修改每列对应的CK值,就是函数中select都要修改成对应的geneA,geneB,geneC。。。好麻烦。。。

有谁想到更好地解决方法么。。。关键是那函数咋写。。。类型怎么会出现错误。。。

[s:18]
</p>

[s:15]难道我没说清楚咩~~~只要算出p.value就成,~~~不管方法是啥,希望最后的结果是我预期的表格输出~~~