【问题标题】:R matrix of listsR列表矩阵
【发布时间】:2016-02-06 23:01:25
【问题描述】:
a=matrix(list(),2,2)
a[1,2]=list(2) ##works

a=matrix(list(),2,2)
a[1,2]=list(2,3) ##doesn't work

a[1, 2] = list(2, 3) 中的错误:要替换的项目数不是 替换长度的倍数

这是第四行的错误信息。如果我尝试

x=list()
x=list(2,4)

它有效,我看不出有什么区别,因为 a[1,2]NULL 列表..

提前致谢。

【问题讨论】:

  • 你想完成什么
  • 我相信单个矩阵元素的长度只能是 1。
  • 我有一个要放入二维矩阵的数据集。矩阵的一些(许多)元素将有来自数据集的多个条目,矩阵的一些元素将没有元素,这就是为什么我认为二维矩阵矩阵会起作用。
  • 我想我已经找到了一种方法,摆弄着:a=matrix(list(),2,2) a[1,2]=list(rbind(c(2,3,4),c(2,3,1))) a[1,2] 达到我的需要

标签: r list matrix


【解决方案1】:

当你替换为list(2)时,查看输出:

a=matrix(list(),2,2)
a[1,2]=list(2)    sapply(a, class)
# [1] "NULL"    "NULL"    "numeric" "NULL"  

也就是说,[1,2] 元素不是list

list(2,3) 可以像这样被强制转换为单个元素;正如 RichardScriven 指出的那样,替换必须是 length-1;以下作品(有点傻,我同意):

a = matrix(list( ), 2, 2)
a[1, 2] = list(list(2, 3))
a
#      [,1] [,2]  
# [1,] NULL List,2
# [2,] NULL NULL  

(仅供参考,我是通过玩dput想出来的,就像这样:)

#What happens if we declare 'a' as a
#  matrix of appropriately-sized lists to start with?
a <- matrix(replicate(4, vector("list", 2), simplify = FALSE), 2, 2)
a
#      [,1]   [,2]  
# [1,] List,2 List,2
# [2,] List,2 List,2
#
# can we replace now?
a[1,2] <- list(2,3)
# (same error; what IS 'a[1,2]' for this matrix?)
dput(a[1, 2])
# list(list(NULL, NULL))
# BINGO! we must replace 'a[1,2]' with a length-one list.

【讨论】:

    猜你喜欢
    • 2019-04-05
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 2015-05-27
    相关资源
    最近更新 更多