更改仅相差一个数字的多个列表的空值

Change the null values ​of multiple lists that only differ by a number

我想更改仅相差一个数字的多个列表的空值。在此示例中,我有 3 个列表:“a1”、“a2”和“a3”,我想将它们的空值更改为“THERE'S NO VALUE”。我试过使用“粘贴”功能的 for 循环,但它没有 运行。这是我的代码的简化版本:

a1<-list(NULL, "a","b")
a2<-list("d", NULL,"m")
a3<-list("k", NULL,"l")

for (i in 1:3){
  var<-paste("a", i, sep = "")
  var[var=='NULL']<-"THERE'S NO VALUE"
}

我也试过赋值函数,但是它改变了所有变量,我只想改变每个变量的空元素(我怀疑为什么,但我不知道如何改变函数来工作):

for (i in 1:3){
  var<-paste("a", i, sep = "")
  assign(var,var[var=='NULL']<-"THERE'S NO VALUE")
}

提前致谢。

我们使用mget获取list中的对象,然后用lapply遍历list,替换NULL中的元素使用新值,然后如果需要,使用 list2env 更改全局环境中的对象值

list2env(lapply(mget(paste0("a", 1:3)), function(x) {
     x[sapply(x, is.null)] <- "THERE'S NO VALUE"
     x}), 
    .GlobalEnv)

-现在检查对象

a1
[[1]]
[1] "THERE'S NO VALUE"

[[2]]
[1] "a"

[[3]]
[1] "b"

a2
[[1]]
[1] "d"

[[2]]
[1] "THERE'S NO VALUE"

[[3]]
[1] "m"

a3
[[1]]
[1] "k"

[[2]]
[1] "THERE'S NO VALUE"

[[3]]
[1] "l"