【问题标题】:preventing R nested list from being converted to named vector防止 R 嵌套列表被转换为命名向量
【发布时间】:2013-08-28 02:51:56
【问题描述】:

我想创建一个嵌套列表,例如,

> L <- NULL
> L$a$b <- 1
> L
$a
$a$b
[1] 1

由于我需要在循环中进行赋值,所以我必须使用括号而不是美元,例如,

> L <- NULL
> a <- "a"
> b <- "b"
> L[[a]][[b]] <- 1
> L
a 
1
> b <- "b1"
> L[[a]][[b]] <- 1
Error in L[[a]][[b]] <- 1 : 
  more elements supplied than there are to replace

这出乎我的意料:L 变成了一个命名向量,而不是一个嵌套列表。但是如果赋值是一个长度超过1的向量,问题就消失了,

> L <- NULL
> L[[a]][[b]] <- 1:2
> L
$a
$a$b
[1] 1 2
> b <- "b1"
> L[[a]][[b]] <- 1
> L
$a
$a$b
[1] 1 2

$a$b1
[1] 1

我的大部分作业都比 1 长,这就是我的代码看似有效但有时奇怪地失败的原因。我想知道是否有任何方法可以解决这种意外行为,谢谢。

【问题讨论】:

  • 看起来像一个错误,或者至少在分配函数中有些奇怪。注意它们之间的区别:L &lt;- list(); L$a$b &lt;- 1; is(L$a)M &lt;- list(); M[["a"]][["b"]] &lt;- 1; is(M$a)
  • 最奇怪的是设置L[[a]][[b]] &lt;- 1后,获取L[[a]][[b]]会报错。
  • @flodel,你使用a 还是"a"?我使用字符串没有错误。

标签: r list vector nested named


【解决方案1】:

你可以明确地说每件事都应该是它自己的列表

> L <- list()
> L[[a]] <- list()
> L[[a]][[b]] <- 1
> L
$a
$a$b
[1] 1

但如果你解释你的实际目标,听起来可能有更好的方法来做你想做的事。

【讨论】:

  • 实际上我想存储我的分析结果(可变长度字符的向量)。为了进行分析,我有几个步骤,比如步骤 a 和 b,并且对于每个步骤,我使用了不同的方法,比如 a1、a2... 和 b1、b2... 最后我想将它们存储在一个嵌套列表中。使用这样的列表结构有利于后续的分析、格式化和循环保存,也让我的工作空间更加紧凑和整洁。谢谢。
  • 如果有最适合您的答案,请随时单击该答案旁边的“复选标记”,表示该答案对您的帮助最大。
【解决方案2】:

查看帮助(“[[”)

当 $

【讨论】:

  • 这解释了发生了什么,但没有解释如何解决它
  • @Sobala,啊我明白了,抱歉没有看帮助。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
  • 2018-03-25
相关资源
最近更新 更多