遍历多个列表
Looping through multiple lists
如何在 R 中循环遍历多个数据集,从 Python 看来有点难以捉摸。
我们有 4 个列表,想简单地删除所有缺失值。
示例:
a <- c(1,2,3, NA)
b <- c(1,NA,3, NA)
e <- c(1,2,3, 4)
f <- c(NA,2,3, NA)
is.na(a_df) ## -> TRUE
na_list = list(a, b, e, f)
尝试过的:
- 复制代码 4 次,这是干的但有效。
for (lst in na_list){
lst <- zoo::na.aggregate(lst)
}
- 使用 Lappy
na_list <- lapply(na_list, zoo::na.aggregate)
> na_list
[[1]]
[1] 1 2 3 2
[[2]]
[1] 1 2 3 2
但是..
> a
[1] 1 2 3 NA
根据更新的问题进行了修改。请注意,问题中现在显示的输入是数字向量,而不是 R 列表。
首先使用 mget 创建命名列表 L,然后将 na.aggregate 应用于 L 的每个组件,最后将组件写回全局环境;但是,您可能只想将结果保留为 L2,因为很难调试覆盖变量的代码。
library(zoo)
nms <- c("a", "b", "e", "f")
L <- mget(nms)
L2 <- lapply(L, na.aggregate)
list2env(L2, .GlobalEnv)
这也可以代替最后 3 行。
for(nm in nms) assign(nm, na.aggregate(get(nm)))
如何在 R 中循环遍历多个数据集,从 Python 看来有点难以捉摸。
我们有 4 个列表,想简单地删除所有缺失值。
示例:
a <- c(1,2,3, NA)
b <- c(1,NA,3, NA)
e <- c(1,2,3, 4)
f <- c(NA,2,3, NA)
is.na(a_df) ## -> TRUE
na_list = list(a, b, e, f)
尝试过的:
- 复制代码 4 次,这是干的但有效。
for (lst in na_list){
lst <- zoo::na.aggregate(lst)
}
- 使用 Lappy
na_list <- lapply(na_list, zoo::na.aggregate)
> na_list
[[1]]
[1] 1 2 3 2
[[2]]
[1] 1 2 3 2
但是..
> a
[1] 1 2 3 NA
根据更新的问题进行了修改。请注意,问题中现在显示的输入是数字向量,而不是 R 列表。
首先使用 mget 创建命名列表 L,然后将 na.aggregate 应用于 L 的每个组件,最后将组件写回全局环境;但是,您可能只想将结果保留为 L2,因为很难调试覆盖变量的代码。
library(zoo)
nms <- c("a", "b", "e", "f")
L <- mget(nms)
L2 <- lapply(L, na.aggregate)
list2env(L2, .GlobalEnv)
这也可以代替最后 3 行。
for(nm in nms) assign(nm, na.aggregate(get(nm)))