我想通過從數據中獲取系統發育信號來轉換我的基因表達數據。我使用R包MCMCglmm。 我能將MCMCglmm到表達式列之一:R:如何製作一個MCMCglmm迴路
require(ape)
library("MCMCglmm")
expr1 <- c(5,6,5, 11,12,13, 32,33,36)
expr2 <- c(1100,1212,1333, 32,33,36, 34, 38, 49)
expr3 <- c(32,33,36, 110,120,130, 320,330,360)
animal <- seq.int(9)
popGroup <- c(rep('A', 3),rep('B', 3), rep('C', 3))
data <- as.data.frame(cbind(expr1, expr2, expr3, animal, popGroup))
class(data$expr1)<-'integer'
class(data$expr3)<-'integer'
class(data$expr2)<-'integer'
# tree file content:
# (((1:2.0,(2:1.0,3:1.0):1.0):3.0,((4:1.0,5:1.0):1.0,6:2.0):3.0):3.0,(7:2.0,(8:1.0,9:1.0):1.0):6.0);
tree <- read.tree("tree.nwk")
prior<-list(R=list(V=1, nu=1), G=list(G1=list(V=1, nu=1)))
summary(MCMCglmm(expr1~popGroup-1, random=~animal, pedigree=tree, data=data, family="poisson", prior = prior))
但是我有超過20000這樣的列。所以,我的想法是循環所有這些:
for (i in 1:3) {
M <- ((colnames(data)[i]~popGroup-1, random=~animal, pedigree=tree, data=data, family="poisson", prior = prior))
summM <- summary(M)
statM <- summM$statistics[,1:2]
print(statM)
}
問題是在循環中定義響應變量。我嘗試了很多方法,但都沒有成功。
您可以使用'sapply'或'lapply'功能輕鬆地將您的功能引導至所有列。下面是一個簡單的'lm':'sapply(data [,1:3],function(x){M <-m(data [,i]〜data $ popGroup); summM < - summary( M); statM < - summM $ adj.r.squared; statM})' – jogall
我發現的問題在於引用'MCMCglmm()'表達式中的列名,因爲函數似乎沒有處理變量以'data $ var1'或'data [,「var2」]'格式引用,而在'data = ...'參數中定義dataframe。也許別人可以幫忙! – jogall
@jogal,感謝您的幫助。是的,問題在於'MCMCglmm()'如何處理變量。對於'glm()'它完美地工作: (for in(i in 1:3)M -slmm(data [,i]〜popGroup-1,data = data,family =「poisson」)); summM < - summary(M); print(summM) }' – dmkr