r - 在循环中填充空向量
问题描述
我创建了四个空向量 ( series_p_river
),我想将它们填充一个循环而不是一个一个地填充。应该填充到向量中的数据包含四个不同河流流域(Main、Danube、Isar 和 Inn)的平均值,每条河流和每个时间步长都有一个值。例如Main.4_mean, Danube.18_mean, Isar.2_mean, Inn.8_mean
. 时间步数ntime
是空向量的长度。
一对一的方法当然效果很好,但不是很优雅:
for (j in 1:ntime) {
series_p_Main[j] <- get(paste0("Main.", j, "_mean"))
series_p_Danube[j] <- get(paste0("Danube.", j, "_mean"))
series_p_Isar[j] <- get(paste0("Isar.", j, "_mean"))
series_p_Inn[j] <- get(paste0("Inn.", j, "_mean"))
}
有没有办法以循环或其他方式实现这一目标?
解决方案
看来您将对每条河流都做类似的事情,因此我通常建议您使用矢量列表而不是环境中的单个对象。这表明series_p_Main
您可能需要参考series_p[["Main"]]
. 但是,使用列表的额外好处是,当您对每个向量执行相同操作时,您可以使用lapply
而不是手动执行每个向量。
例如,
ntime <- 3
series_p <- lapply(setNames(nm = c("Main", "Danube", "Isar", "Inn")),
function(nm) sprintf("%s.%s_mean", nm, seq_len(ntime)))
str(series_p)
# List of 4
# $ Main : chr [1:3] "Main.1_mean" "Main.2_mean" "Main.3_mean"
# $ Danube: chr [1:3] "Danube.1_mean" "Danube.2_mean" "Danube.3_mean"
# $ Isar : chr [1:3] "Isar.1_mean" "Isar.2_mean" "Isar.3_mean"
# $ Inn : chr [1:3] "Inn.1_mean" "Inn.2_mean" "Inn.3_mean"
series_p[["Main"]]
# [1] "Main.1_mean" "Main.2_mean" "Main.3_mean"
或者如果ntime
实际上是一个向量,则删除seq_len
:
ntime <- c(4, 8, 12)
series_p <- lapply(setNames(nm = c("Main", "Danube", "Isar", "Inn")), function(nm) sprintf("%s.%s_mean", nm, ntime))
series_p[["Main"]]
# [1] "Main.4_mean" "Main.8_mean" "Main.12_mean"
推荐阅读
- swift - 你如何以这种格式显示日期?“2018 年 7 月 18 日上午 10:02”
- typescript - 为什么一个类的变量可以指向具有相同内容的不同类?
- javascript - 无法将 ajax:error 处理程序附加到表单 ID
- c++ - 为什么 Qt QString 的 replace 方法会改变 QString?
- php - PHP preg_match_all 谜语
- rest - Zoho Projects API - 身份验证令牌
- scala - 从 S3 读取压缩的 CSV 文件
- ios - 在 Swift 中自定义栏按钮项
- java - 在java中检测所有具有特定注释的类
- r - 在闪亮的 R 中设置 DT 中的展开行按钮的样式