【问题标题】:R difference between [[]] and [] [duplicate][[]]和[]之间的R区别[重复]
【发布时间】:2014-07-22 20:06:08
【问题描述】:

我想清楚地理解 [] 和 [[]] 之间的区别,我在代码的 sn-p 下运行。我知道 [[]] 返回列表的单个成员,而 [] 返回元素列表。但是,为什么我在运行“all_data[1]=list(5,6)”时会出错,但在运行“all_data[[1]]=list(5,6)”或运行“时没有错误” all_data[2]=5"

all_data <- list()
all_data[2]=5
all_data[1]=list(5,6)



all_data[[1]]=list(5,6)
all_data

根据第一个答案的第一条评论,添加一行代码,有助于进一步理解

all_data[1:2] <- list(5,6)

【问题讨论】:

  • 这篇博文非常清楚地解释了子集操作(包括子集和赋值)adv-r.had.co.nz/Subsetting.html。 @Senor O我只想复制评论中的链接,而不是从博客复制粘贴并回答问题。有一个“子集和分配”部分解决了这个特定问题。
  • @konvas 没有回答他的具体问题

标签: r


【解决方案1】:

all_data[1]=list(5,6) 给你一个警告(不是错误),长度不一样。您不能将一元素列表设置为二元素列表。这就像尝试x &lt;- 1; x[1] &lt;- 1:2

但是您可以将列表的一个元素设置为包含另一个列表,这就是 all_data[[1]]=list(5,6) 起作用的原因。

【讨论】:

  • 我认为添加示例 all_data[1:2] &lt;- list(5,6) 也可能有助于理解。
  • 我了解它是如何工作的,但它似乎并不直观。为什么List[1] &lt;- a 中的a 必须与List[1] 的结构相匹配,而List[[1]] &lt;- a 可以用任何东西代替? List &lt;- list(); List[1] &lt;- list(5,6)List &lt;- list(list(5, 6)) 相同是有意义的
  • @SeñorO 像x &lt;- numeric(); x[1] &lt;- c(5,6) 这样的东西应该提供什么? x &lt;- 1:5; x[2] &lt;- c(5,6) 怎么样。
  • @Dason 什么都没有,因为 x[1] 永远不会返回长度为 2 的向量,而 List[1] 可以返回长度为 2 的列表。
  • @SeñorO - No. List[1] 返回一个 1 元素列表。该元素本身可能是一个包含多个元素的列表,但 List[1] 将始终给出长度为 1 的子列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 2011-04-08
  • 2012-11-24
  • 2013-06-05
  • 2021-09-29
  • 2020-05-27
相关资源
最近更新 更多