R:使用模式匹配从模型摘要列表中提取值

时间:2017-06-13 14:13:40

标签: r grep sapply

我有一个模型摘要列表(让我们说它是一个线性模型;但这可以适用于任何模型摘要)。

目前,我使用以下内容从摘要列表中提取某个系数:

coef <- sapply(modelsummaries, function(x) x[[4]][[4,1]])

我怎么能通过调用变量名而不是依赖行位来做到这一点?

对于列表中的每个模型摘要,只有一个变量不同,其名称为V_01,V_02,V_03等。这是我想要提取的变量系数。

我正在考虑使用grep函数,例如:

coef <- sapply(modelsummaries, function(x) x[[4]][[grep("^[V]"),1]]) 

...但是还没有让它发挥作用。有什么建议吗?

这是一个可重现的例子(只需要调整最后一行):

newdata <- as.data.frame(seq(from = 0.1, to = 0.9, by = 0.1))
newdata <- as.data.frame(t(newdata))
colnames(newdata) = newdata[1, ]
colnames(newdata) <- paste("V", colnames(newdata), sep = "_")

mtcars <- mtcars
mtcarsmodel <- data.frame(mtcars, newdata)

mtcarsmodel[c(12:20)] <- sample(1:100, 288, replace=TRUE)

xnam <- paste(colnames(mtcarsmodel)[c(4:5)], sep="")
xnam2 <- paste(colnames(mtcarsmodel)[c(12:20)], sep="") 

fmla <- paste(xnam, collapse= "+")
fmla2 <- paste(paste(fmla), "+")
fla <- paste("mpg ~", paste(fmla2))

models <- lapply(setNames(xnam2, xnam2), function(var) {
  form = paste(fla, var)
  lm(form, data=mtcarsmodel)
})

modelsummaries <-lapply(models, summary)
coef <- sapply(modelsummaries, function(x) x[[4]][[4,1]]) 

2 个答案:

答案 0 :(得分:1)

你非常接近,你只需要告诉grep要搜索什么,这是coef()返回的系数矩阵的rownames(这是获得它们的更好方式而不是{{} 1}})。另外,为了不重用该名称,我建议将结果保存在不同的内容中,例如[[4]]

coefs

另外,请查看新的coefs <- sapply(modelsummaries, function(x) { coef(x)[grep("^V", rownames(coef(x))),"Estimate"] }) V_0.1 V_0.2 V_0.3 V_0.4 V_0.5 V_0.6 V_0.7 V_0.8 0.030927774 -0.053437459 0.009335911 -0.011009187 -0.010303494 -0.001705420 -0.036297492 0.021838044 V_0.9 0.005457086 软件包,以便更轻松地从模型中提取某些信息。

答案 1 :(得分:0)

在使用grep解决方案后,我犯了亵渎神灵并使用了sql解决方案:

library('sqldf')
new <- lapply(modelsummaries, function(x) setDT(data.frame(x[[4]]), keep.rownames = TRUE)[])
values <- sapply(new, function(x) sqldf("SELECT x.estimate, x.'Pr...t..' FROM x WHERE rn like '%V_%'"))
data <- as.data.frame(t(rbind(values)))

我也提出了一个(有点难看)基于grep的解决方案:

coef <- sapply(modelsummaries, function(x) as.numeric(unlist(strsplit(grep("^V_", capture.output(x), value = TRUE), "\\s+"))[[2]]))