我试图在几个列表上同时循环。但是,我正在使用几个for循环来达到预期的结果。我想知道是否有更好,更有效的方法来做到这一点。
这是我的代码
for (i in list(3,6)){
for (n in list("rmse.","mape.", "mpe.")){
for (b in list("base.", "rev.")){
a <- paste0(b, "fcst")
c <- paste0(n, a)
x <- paste0(c, i)
print(x)
}
}
}
结果如下:
[1] "rmse.base.fcst3"
[1] "rmse.rev.fcst3"
[1] "mape.base.fcst3"
[1] "mape.rev.fcst3"
[1] "mpe.base.fcst3"
[1] "mpe.rev.fcst3"
[1] "rmse.base.fcst6"
[1] "rmse.rev.fcst6"
[1] "mape.base.fcst6"
[1] "mape.rev.fcst6"
[1] "mpe.base.fcst6"
[1] "mpe.rev.fcst6"
我很确定有一种更有效的方式,也许还有lapply? 将结果存储在一个列表中也非常有用,因此任何建议都非常受欢迎。
答案 0 :(得分:4)
这将生成一个数据框,最后一列x就是您所需要的,
df = expand.grid(i = c(3,6),
n = c("rmse.", "mape.", "mpe."),
b = c("base.", "rev.")) %>%
mutate(x = paste0(n, b, "fcst", i))
只做
df %>% select(x)
查看它们。您也可以将它存储在某处以引用它。
答案 1 :(得分:2)
zz <- expand.grid(n,b,"fcst",i)
do.call(paste0, zz)
# [1] "rmse.base.fcst3" "mape.base.fcst3" "mpe.base.fcst3" "rmse.rev.fcst3"
# [5] "mape.rev.fcst3" "mpe.rev.fcst3" "rmse.base.fcst6" "mape.base.fcst6"
# [9] "mpe.base.fcst6" "rmse.rev.fcst6" "mape.rev.fcst6" "mpe.rev.fcst6"
输入:
n <- c("rmse.","mape.", "mpe.")
b <- c("base.", "rev.")
i <- c(3,6)