使用 sapply 替换列表中的空元素
Replace empty element in a list using sapply
我有两个列表。第一个有一个空元素。我想用另一个列表的第三个列表元素的第一个向量替换那个空元素。
l1 <- list(a=1:3,b=4:9,c="")
l2 <- list(aa=11:13,bb=14:19,cc=data.frame(matrix(100:103,ncol=2)))
l1[sapply(l1, `[[`, 1)==""] <- l2[[3]][[1]]
使用sapply
,我可以识别哪些元素是空的。但是,当我尝试为这个空元素分配一个向量时:我收到此错误消息:
Warning message: In l1[sapply(l1, [[
, 1) == ""] <- l2[[3]][[1]] :
number of items to replace is not a multiple of replacement length
这只是一个警告,但我得到的结果不是我想要的。这是我得到的 l1:
> l1
$a
[1] 1 2 3
$b
[1] 4 5 6 7 8 9
$c
[1] 100
这就是我需要的($c 中的两个元素):
> l1
$a
[1] 1 2 3
$b
[1] 4 5 6 7 8 9
$c
[1] 100 101
右侧应该是一个列表,因为您要替换的是列表元素。所以你希望它是
... <- list(l2[[3]][[1]])
此外,您可以考虑使用 !nzchar(l1)
代替 sapply(...) == ""
。它可能更有效率。最终表达式为:
l1[!nzchar(l1)] <- list(l2[[3]][[1]])
给出更新后的 l1
:
$a
[1] 1 2 3
$b
[1] 4 5 6 7 8 9
$c
[1] 100 101
就用右边的l2[[3]][1]
(单[
不是[[
)
我有两个列表。第一个有一个空元素。我想用另一个列表的第三个列表元素的第一个向量替换那个空元素。
l1 <- list(a=1:3,b=4:9,c="")
l2 <- list(aa=11:13,bb=14:19,cc=data.frame(matrix(100:103,ncol=2)))
l1[sapply(l1, `[[`, 1)==""] <- l2[[3]][[1]]
使用sapply
,我可以识别哪些元素是空的。但是,当我尝试为这个空元素分配一个向量时:我收到此错误消息:
Warning message: In l1[sapply(l1,
[[
, 1) == ""] <- l2[[3]][[1]] :
number of items to replace is not a multiple of replacement length
这只是一个警告,但我得到的结果不是我想要的。这是我得到的 l1:
> l1
$a
[1] 1 2 3
$b
[1] 4 5 6 7 8 9
$c
[1] 100
这就是我需要的($c 中的两个元素):
> l1
$a
[1] 1 2 3
$b
[1] 4 5 6 7 8 9
$c
[1] 100 101
右侧应该是一个列表,因为您要替换的是列表元素。所以你希望它是
... <- list(l2[[3]][[1]])
此外,您可以考虑使用 !nzchar(l1)
代替 sapply(...) == ""
。它可能更有效率。最终表达式为:
l1[!nzchar(l1)] <- list(l2[[3]][[1]])
给出更新后的 l1
:
$a
[1] 1 2 3
$b
[1] 4 5 6 7 8 9
$c
[1] 100 101
就用右边的l2[[3]][1]
(单[
不是[[
)