我想更改空值只相差一个数字的多个列表。在这个例子中,我有3个列表:;a1"a2";以及";a3";,并且我想要将它们的空值改变为"0";没有价值;。我尝试过使用"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"
}
我也尝试过赋值函数,但它会更改所有变量,我只想更改每个变量的null元素(我怀疑为什么,但我不知道如何更改函数(:
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"