【发布时间】:2019-05-29 20:14:37
【问题描述】:
谁能帮忙!
我正在尝试使用 lapply 在一个大列表中循环 lstrends(),但我收到了错误并且想不出修复方法
错误:
“数据错误[[var]]:下标越界”
代码:
## Test data
Tissue=c("Normal","Normal","Normal","Normal","Tumor","Tumor","Tumor","Tumor")
GeneY = c(34,12,11,8,53,32,39,80)
GeneZ = c(4,7,3,9,44,32,56,77)
GeneX = c(42,54,59,22,35,12,22,40)
dvList <- c("GeneY", "GeneZ")
breast = data.frame(Tissue, GeneX,GeneY,GeneZ)
## linear regression lapply works fine
model = lapply(dvList, function(x) {
lm(substitute(i~GeneX*Tissue, list(i = as.name(x))), data = breast)})
library(lsmeans)
## selecting individual components of the list works fine
m.lst = as.data.frame(lstrends(model[[2]], "Tissue", var="GeneX"))
## lapply for lstrends doesn't work for me
m.lst = lapply(model, function(x) {
as.data.frame(lstrends(model, "Tissue", var="GeneX"))})
【问题讨论】:
-
看看
substitute(i~GeneX*Tissue, list(i = as.name(dvList[[1]])))。您将GeneX作为独立变量和因变量包括在内。lm公式看到这个就掉GeneX,然后lstrends函数在模型2的变量中找不到GeneX -
为什么选择列表中的单个组件仍然有效?即
model[[2]]...你有什么建议可以让lstrends(model[[2]], "Tissue", var="GeneX")函数在整个列表中循环吗? -
我今天早上更改了代码以删除
lm()中的GeneX~GeneX*Tissue...不幸的是在lstrends()中收到相同的错误消息:( -
基本上,我需要做的就是成功地将以下代码循环到列表
as.data.frame(lstrends(model, "Tissue", var="GeneX"))中的所有元素,以获得数据框列表或一个绑定数据框