使用空索引索引列表

Eva*_*Aad 8 indexing r list

在Hadley Wickam的Advanced R中,使用空索引索引数据帧的技术已多次,但只是顺便解释.我试图弄清楚用空索引索引列表的规则.请考虑以下四个陈述.

> (l <- list(a = 1, b = 2))
$a
[1] 1

$b
[1] 2

> (l[] <- list(c = 3))
$c
[1] 3

> l
$a
[1] 3

$b
[1] 3

> l[]
$a
[1] 3

$b
[1] 3
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 为什么第二个语句的输出与第三个语句的输出不同?赋值是否应该返回被赋值的对象,在这种情况下,第二个语句应该产生与第三个相同的输出?
  2. 为什么第二个语句中的赋值会导致第三个语句后显示的输出?分配给空旷索引列表的规则是什么?
  3. 第四个陈述怎么产生显示的输出?当一个列表不在作业的左侧时,有哪些规则可以为具有空索引的列表编制索引?

Jot*_*ota 2

简而言之 l[]将返回整个列表。

(l <- list(a = 1, b = 2))
l[]
Run Code Online (Sandbox Code Playgroud)

l[] <- list(c=3)本质上是将分配给每个索引的内容重新分配为现在的结果list(c=3)l[[1]] <- 3对于这个例子,它与说and相同l[[2]] <- 3。从该?'['页面多次提到空索引:

当索引表达式出现在赋值的左侧(称为子赋值)时,x 的该部分将设置为赋值右侧的值。

并且

空索引选择所有值:这最常用于替换所有条目但保留属性。

所以,我粗略地认为这意味着 的每个索引l应该评估为list(c=3)

当您输入时,(l[] <- list(c = 3))返回的是替换值。当您输入l或时,l[]您将看到每个索引处的值已被替换为list(c=3)