为了给我的问题提供一些上下文,我有一个大数据集。我想基于列变量(它是一个字符向量)分析子集中的数据集。然后我想将此结果的一部分存储在矩阵中。我之前使用过循环将从循环中每个循环计算出的值存储到矩阵中,但仅当'i'是数字而不是字符时。
到目前为止我的内容如下: 主要问题是我使用'i'来确定我想要存储值的矩阵的位置,但是当'i'是一个字符时它不起作用。
list <- c("xyz","usd","lki","josdl","olid"......"kadl")
output= matrix(ncol=5, nrow=length(unique(c))
for(i in list){
x <- filter(df, colvar == "i")
if(nrow(x) <=1) next
y <- metagen(RR, SE, data=x) #meta-analysis results
###### Inputting values from metagen into dataframe ####
meta.analysis[i,1] = "i" #colvar
meta.analysis[i,2] = y$TE.fixed #fixed effect model
meta.analysis[i,3] = y$seTE.fixed #seTE.fixed
meta.analysis[i,4] = y$lower.fixed #95%CI-lower bound, fixed.effect
meta.analysis[i,5] = y$upper.fixed #95%CI-upper bound, fixed effect
meta.analysis[i,6] = y$zval.fixed #Z-value, fixed effect
meta.analysis[i,7] = y$pval.fixed #P-value of Z-value, fixed effect
meta.analysis[i,8] = y$TE.random #random effect model
meta.analysis[i,9] = y$seTE.random #seTE.random
meta.analysis[i,10] = y$lower.random #95%CI-lower bound, random.effect
meta.analysis[i,11] = y$upper.random #95%CI-upperbound, random effect
meta.analysis[i,12] = y$zval.random #Z-value, random effect
meta.analysis[i,13] = y$pval.random #P-value of Z-value, random effect
meta.analysis[i,14] = y$k #Number of studies
}
任何帮助/输入将不胜感激! =)
答案 0 :(得分:0)
考虑使用sapply()
的向量化方法,因为metagen对象返回各种组件的列表:
list <- c("xyz","usd","lki","josdl","olid"......"kadl")
meta.analysis <- sapply(list, function(i){
x <- filter(df, colvar == i)
y <- metagen(RR, SEE, data = x)[c("TE.fixed", "seTE.fixed", "lower.fixed",
"upper.fixed", "zval.fixed", "pval.fixed",
"TE.random", "seTE.random", "lower.random",
"upper.random", "zval.random", "pval.random")]
y <- c(i, y) # colvar
return(y)
}
)
为了确保矩阵返回,请考虑vapply()
- 但是,忽略 colvar ,因为它是一个字符而不是数字,矩阵中的元素必须是一种类型:
meta.analysis <- vapply(list, function(i) { ...same as above...},
FUN.VALUE = numeric(12))