R语言 添加或写入列表元素的子元素

jecbmhm3  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(118)

从一个列表中,我可以通过sapply(list, "[[", 2)读取每个元素的第二个子元素。我知道如何写入或追加一个子元素到列表中的一个元素。
问:
我如何在 each 元素中对选定的子元素进行写入(没有for循环,既不可见也不可隐藏在另一个函数之外),或者在列表的 * each* 元素中追加一个额外的子元素?我正在寻找一个通用的解决方案,独立于现有元素和子元素的数量。
例如:

list.main <- list(
    list1 = list(a="a", b="b", c="c"), 
    list2 = list(e1="1", e2="2"), 
    list3 = list(aLpha="alpha", beta="beta"))

字符串
如何将另一个(第二个或第三个)元素new="new"添加到list1list2list3中?
首选精益和/或Base R解决方案,但对任何解决方案开放。

lmvvr0a8

lmvvr0a81#

对于问题的第二部分,如果你愿意在每个子列表的末尾添加新元素,你可以这样做。

lapply(list.main, function(x) c(x, new = "new"))

$list1
$list1$a
[1] "a"

$list1$b
[1] "b"

$list1$c
[1] "c"

$list1$new
[1] "new"

$list2
$list2$e1
[1] "1"

$list2$e2
[1] "2"

$list2$new
[1] "new"

$list3
$list3$aLpha
[1] "alpha"

$list3$beta
[1] "beta"

$list3$new
[1] "new"

字符串

fcipmucu

fcipmucu2#

只需c oncatenate list元素。

> lapply(list.main, c, list(NEW='NEW')) |> str()
List of 3
 $ list1:List of 4
  ..$ a  : chr "a"
  ..$ b  : chr "b"
  ..$ c  : chr "c"
  ..$ NEW: chr "NEW"
 $ list2:List of 3
  ..$ e1 : chr "1"
  ..$ e2 : chr "2"
  ..$ NEW: chr "NEW"
 $ list3:List of 3
  ..$ aLpha: chr "alpha"
  ..$ beta : chr "beta"
  ..$ NEW  : chr "NEW"

字符串
或者使用append

> lapply(list.main, append, list(NEW='NEW')) |> str()
List of 3
 $ list1:List of 4
  ..$ a  : chr "a"
  ..$ b  : chr "b"
  ..$ c  : chr "c"
  ..$ NEW: chr "NEW"
 $ list2:List of 3
  ..$ e1 : chr "1"
  ..$ e2 : chr "2"
  ..$ NEW: chr "NEW"
 $ list3:List of 3
  ..$ aLpha: chr "alpha"
  ..$ beta : chr "beta"
  ..$ NEW  : chr "NEW"


这使您能够指定例如在1元素之后。

> lapply(list.main, append, list(NEW='NEW'), 1) |> str()
List of 3
 $ list1:List of 4
  ..$ a  : chr "a"
  ..$ NEW: chr "NEW"
  ..$ b  : chr "b"
  ..$ c  : chr "c"
 $ list2:List of 3
  ..$ e1 : chr "1"
  ..$ NEW: chr "NEW"
  ..$ e2 : chr "2"
 $ list3:List of 3
  ..$ aLpha: chr "alpha"
  ..$ NEW  : chr "NEW"
  ..$ beta : chr "beta"


注意,缺少的元素不会被填充。

> lapply(list.main, append, list(NEW='NEW'), 999) |> str()
List of 3
 $ list1:List of 4
  ..$ a  : chr "a"
  ..$ b  : chr "b"
  ..$ c  : chr "c"
  ..$ NEW: chr "NEW"
 $ list2:List of 3
  ..$ e1 : chr "1"
  ..$ e2 : chr "2"
  ..$ NEW: chr "NEW"
 $ list3:List of 3
  ..$ aLpha: chr "alpha"
  ..$ beta : chr "beta"
  ..$ NEW  : chr "NEW"

相关问题