我寻找答案,但他们没有提供我想要的东西。我正在运行一些简单的模型,我试图将结果(主要是LRT)放到表格或矩阵中,所以我可以更好地呈现它们。但是,命令for不允许我这样做,这很奇怪,因为其他编程语言很容易做到。
在最后一句中,如果我用[j]或其他任何东西替换它,它仍然说没有找到对象。我如何使用for覆盖它?谢谢。
li<-array(c(716, 207,79,25,819,186,67,22), c(2,2,2))
dimnames(li)<-list(c("Normal","High"),c("N BP", "H BP"),c("A","B"))
#General Model with three variables and no interactions.
a1<-loglin(li,list(1,2,3))
#Model with XY,Z
a2<-loglin(li,list(c(1,2),3))
#Model with XZ,Y
a3<-loglin(li,list(c(1,3),2))
#Model with X,ZY
a4<-loglin(li,list(c(2,3),1))
#Model with XY,XZ
a5<-loglin(li,list(c(1,2),c(1,3)))
#Model with YZ,XZ
a6<-loglin(li,list(c(2,3),c(1,3)))
#Model with XY,ZY
a7<-loglin(li,list(c(1,2),c(2,3)))
tabi<-matrix(data=c(0),nrow=10,ncol=2)
for (j in 1:7) {
i<-j
tabi[i,1]<-a[i]$lrt
}
旁注。我曾尝试写过“ai”,“aj”,“a [i]”等,但它不起作用。
答案 0 :(得分:3)
如果您在工作区中拥有所有这些模型,则可以使用mget
提取,然后返回一个列表,然后循环执行此操作以提取lrt
。
所以对你的例子来说,
sapply(mget(ls(pattern="a\\d")), "[", "lrt")
其中mget(ls(pattern="a\\d"))
使用模式a
编号从全局env中获取数据,sapply
循环遍历此列表以进行提取。
作为替代工作流程,您可以将模型存储在列表中,而不是在工作区中浮动大量模型。
因此将参数存储在列表中
para <- list(list(1,2,3), list(c(1,2),3), list(c(1,3),2))
然后循环应用模型
lst <- lapply(para, function(x) loglin(li, x))
这会将每个模型存储在lst
中。如果您只是想要这个项目,可以使用上面的loglin(li, x)$lrt
。否则你可以像以前一样循环来提取它。
sapply(lst, "[", "lrt")
请注意,您的代码a[1]
与a1
答案 1 :(得分:1)
对于那些想要更简单回答并且和我一样的人来说,这是一种更简单的方法,它涉及更少的编码:
基本上只需创建一个列表并通过添加[[]]将模型定义为列表,就是这样。定期运行您的代码。
a<-list()
#General Model with three variables and no interactions.
a[[1]]<-loglin(li,list(1,2,3))
#Model with XY,Z
a[[2]]<-loglin(li,list(c(1,2),3))
#Model with XZ,Y
a[[3]]<-loglin(li,list(c(1,3),2))
#Model with X,ZY
a[[4]]<-loglin(li,list(c(2,3),1))
#Model with XY,XZ
a[[5]]<-loglin(li,list(1:2,1:3))
#Model with YZ,XZ
a[[6]]<-loglin(li,list(2:3,1:3))
#Model with XY,ZY
a[[7]]<-loglin(li,list(1:2,2:3))
tabi<-matrix(data=c(0),nrow=10,ncol=2)
for (j in 1:7) {
i<-j
tabi[i,1]<-a[[j]]$pearson
}
答案 2 :(得分:0)
可以使用paste来连接a,并在循环中使用i的值将a1,a2,a3等作为字符串,然后使用eval和parse将其作为变量进行评估。
tabi<-matrix(data=c(0),nrow=10,ncol=2)
for (i in 1:7) {
tabi[i,1]<-eval(parse(text = paste("a",i,sep="")))$lrt
}