如何将R向量中的值注入列表对象,而不考虑列表结构,包括嵌套级别和列表中使用的名称?

xurqigkl  于 2024-01-03  发布在  其他
关注(0)|答案(1)|浏览(174)

假设我们有一个原始列表对象list_tmp,具有不同的嵌套级别,看起来像下面这样(在文章的底部是list_tmp的代码):

  1. > list_tmp
  2. $clinic
  3. $clinic$trial
  4. $clinic$trial$patient
  5. A B
  6. [1,] 0 0
  7. [2,] 0 0
  8. $clinic$result
  9. C
  10. [1,] 0
  11. [2,] 0
  12. $test
  13. D
  14. [1,] 0
  15. [2,] 0

字符串
如何将向量值以行-列的方向“注入”列表对象,而不考虑子列表名称或嵌套级别?填充发生直到耗尽向量元素的较早者,或直到到达列表的末尾。在完整的代码中,向量元素的数量将始终等于列表中“单元格”的数量。
例如,如果我们有向量vec <- (1,2,3,4,5,6,7,8),将这些向量值依次倒入list_tmp将导致以下结果:

  1. > list_tmp
  2. $clinic
  3. $clinic$trial
  4. $clinic$trial$patient
  5. A B
  6. [1,] 1 3
  7. [2,] 2 4
  8. $clinic$result
  9. C
  10. [1,] 5
  11. [2,] 6
  12. $test
  13. D
  14. [1,] 7
  15. [2,] 8


list_tmp的代码:

  1. list_tmp <- list(
  2. clinic = list(
  3. trial = list(
  4. patient = matrix(0, nrow = 2, ncol = 2, dimnames = list(NULL, c("A", "B")))
  5. ),
  6. result = matrix(0, nrow = 2, ncol = 1, dimnames = list(NULL, c("C")))
  7. ),
  8. test = matrix(0, nrow = 2, ncol = 1, dimnames = list(NULL, c("D")))
  9. )

yv5phkfx

yv5phkfx1#

使用relisting轻松完成:

  1. a <- unlist(as.relistable(list_tmp))
  2. a[seq_along(vec)] <- vec
  3. unclass(relist(a))
  4. $clinic
  5. $clinic$trial
  6. $clinic$trial$patient
  7. A B
  8. [1,] 1 3
  9. [2,] 2 4
  10. $clinic$result
  11. C
  12. [1,] 5
  13. [2,] 6
  14. $test
  15. D
  16. [1,] 7
  17. [2,] 8

个字符

展开查看全部

相关问题