有没有简单的方法可以使用r中的循环来简化此代码?

时间:2020-06-11 21:51:02

标签: r loops

我正在Rstudio中工作,并且有一系列像这样的代码。总共有34个,我想知道是否有一种简单的方法可以只编写一次并使其遍历 rsqRow.a {#} combineddfs.a {# } 和内部使用的 s _ {##'State'}

变量
# s_WA.train.lr.Summary

rsqRow.a32 = summary(s_WA.train.lr)$r.squared
# rsqRow.a32

Coef = summary(s_WA.train.lr)$coef[,1] # row, column
CoefRows = data.frame(Coef)
Pval = summary(s_WA.train.lr)$coef[,4]
PvalRows = data.frame(Pval)
combineddfs.a32 <- merge(CoefRows, PvalRows, by=0, all=TRUE)
# combineddfs.a32
# s_WI.train.lr.Summary

rsqRow.a33 = summary(s_WI.train.lr)$r.squared
# rsqRow.a33

Coef = summary(s_WI.train.lr)$coef[,1] # row, column
CoefRows = data.frame(Coef)
Pval = summary(s_WI.train.lr)$coef[,4]
PvalRows = data.frame(Pval)
combineddfs.a33 <- merge(CoefRows, PvalRows, by=0, all=TRUE)
# combineddfs.a33
# s_WY.train.lr.Summary

rsqRow.a34 = summary(s_WY.train.lr)$r.squared
# rsqRow.a34

Coef = summary(s_WY.train.lr)$coef[,1] # row, column
CoefRows = data.frame(Coef)
Pval = summary(s_WY.train.lr)$coef[,4]
PvalRows = data.frame(Pval)
combineddfs.a34 <- merge(CoefRows, PvalRows, by=0, all=TRUE)
# combineddfs.a34

1 个答案:

答案 0 :(得分:0)

正如注释中已经提到的那样,您应该将数据保存在列表中,以避免重复的过程。

找出代表全局环境中所有数据框名称的通用模式,并将其用作ls中的模式以获取其名称的字符向量。然后,您可以使用mget获取列表中的数据帧。

list_data <- mget(ls(pattern = 's_W.*train\\.lr'))

一旦有了数据帧列表,就可以使用lapply对其进行迭代,并在函数中返回所需的值。请注意,可能有一种更简单的方法来编写尝试中的内容,但是由于我没有数据,因此我不会冒风险缩短代码。在这里,我为每个数据帧返回rsqRowcombineddfs。您可以根据自己的喜好添加/删除对象。

all_values <- lapply(list_data, function(x) {
    rsqRow = summary(x)$r.squared
    Coef = summary(x)$coef[,1]
    CoefRows = data.frame(Coef)
    Pval = summary(x)$coef[,4]
    PvalRows = data.frame(Pval)
    combineddfs <- merge(CoefRows, PvalRows, by=0, all=TRUE)
    list(rsqRow, combineddfs)
})