在MCMCglmm包中的数据帧的下标分配中不允许缺少值

时间:2017-08-21 08:50:15

标签: r

我正在使用MCMCglmm包用于广义线性模型。以下是我的代码,Final_KIRC_met_act包括途径分数。

> g<-factor(g, levels=c("MALE","FEMALE"), labels=c(0,1))

> data<-cbind(Final_KIRC_met_act, g)

> data2<-as.data.frame(data)

> head(data2)

             M00001_C00022 M00002_C00022 M00003_C05345 M00004_R02739 M00006_C00199 M00007_C00117 M00009_R00342,R00361
TCGA-6D-AA2E  0.0001438301   0.004029765  0.0002290721  0.0004104972    0.02246794     0.1467008         1.703306e-04
TCGA-A3-3306  0.0001619469   0.003969637  0.0001457640  0.0003494476    0.02197964     0.1260309         9.222817e-05
TCGA-A3-3307  0.0001403204   0.003569992  0.0002373946  0.0003091625    0.02021713     0.1249811         8.646219e-05
TCGA-A3-3308  0.0001105221   0.002883832  0.0001282293  0.0003436197    0.02256994     0.1214749         9.128686e-05
TCGA-A3-3311  0.0001468475   0.003847826  0.0001714674  0.0003078584    0.02247165     0.1173292         9.803733e-05
TCGA-A3-3313  0.0001223408   0.003363544  0.0002314604  0.0002821620    0.01696295     0.1273991         1.616942e-04
...

当我应用MCMCglmm时,我会收到以下错误:

> model<-MCMCglmm(Final_KIRC_met_act~g,data=data2)

Error in `[<-.data.frame`(`*tmp*`, , response.names, value = c(0.000143830145988399,  : 
  missing values are not allowed in subscripted assignments of data frames

但是,当我控制数据时,没有缺失值

> table(is.na(Final_KIRC_met_act))

FALSE 
50496

> table(is.na(g))

FALSE 
  526 

 table(is.na(data2))

FALSE 
51022 

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

使用 MCMCglmm 时,必须先附加数据集,然后构建模型。

例如: 当我不使用 attach 命令时,我得到:

<块引用>

bayes_reg <- MCMCglmm(train$SalePrice ~-train$PoolQC,data=train)

[<-.data.frame(*tmp*, , response.names, value = c(12.247694320221, : 下标中不允许缺失值 数据框的赋值

然后,我使用附件:

<块引用>

附加(火车) bayes_reg <- MCMCglmm(SalePrice ~-PoolQC ,data=train)

代码运行成功。

答案 1 :(得分:0)

正如@Roland在他的评论中指出的那样,“使用cbind将多个回复作为矩阵传递,因为R's non-standard evaluation这与提供仅仅是these不同响应矩阵作为变量。但是,您可以自己使用此语言功能来构建适当的调用:

responses = parse(text=paste0("cbind(",paste(colnames(Final_KIRC_met_act ), collapse = ","),")"))[[1]]

model <- eval(substitute(
    MCMCglmm(responses ~ g, data = data2), 
    list(responses=responses)
))

您的通话可能存在更多问题,例如:我想你还需要为family参数提供向量。但对他们来说,会有更多信息性的错误信息。最小的工作示例也允许解决这些问题。