在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)
问题:
简而言之 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)。