【发布时间】:2013-02-17 04:19:54
【问题描述】:
我在使用'[<-' 时注意到以下内容。我在 replace 元素方面很成功,但在 appending 元素到向量中却没有成功。
例子:
VarX <- integer()
VarX[1] <- 11
`[<-`(VarX, 2, 22)
VarX
# [1] 11
# Expected the value of VarX to be:
# [1] 11 22
# Also tried:
`[<-`(VarX, i=2, value=22)
VarX
# [1] 11
但是,如果索引处已经有一个值,则该值会被替换。
VarX <- integer()
VarX[1] <- 11
VarX[2] <- 99
VarX
# [1] 11 99
`[<-`(VarX, 2, 22)
VarX
# [1] 11 22
我只是语法错误,还是按预期进行?任何进一步的见解 这里发生的事情将不胜感激。
请注意,除了更好地理解语言之外,这里没有具体的目标。
关于 @Roland 和 @Dason 的 cmets 的更新。
似乎该行为与最初分配对象值的方式有关。例如,当分配给VarX 的值为1:2 与c(1, 2) 时,[(VarX, 2, 22) 的行为会给出不同的结果,如下所示:
### 更改未保存到 VarX
rm(VarX) # actually ran: rm(list=ls(all=TRUE))
VarX <- 1:2
VarX
# [1] 1 2
`[<-`(VarX, 2, 22)
# [1] 1 22
VarX
# [1] 1 2
### 更改已保存到 VarX
rm(VarX) # actually ran: rm(list=ls(all=TRUE))
VarX <- c(1, 2)
VarX[2] <- 2
VarX
# [1] 1 2
`[<-`(VarX, 2, 22)
# [1] 1 22
VarX
# [1] 1 22
> sessionInfo()
R version 2.15.1 (2012-06-22)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
【问题讨论】:
-
这很好用:
VarX <- integer(); VarX[1] <- 11; VarX[2] <- 22。为什么要尝试以非标准方式调用该函数? -
我得到不同的行为(替换和附加基本相同)。 `
[<-`(VarX, 2, 22)打印[1] 11 22,但VarX之后分别给出[1] 11和[1] 11 99。 -
您可以在干净的会话中重新运行您的代码部分吗?我找不到
[<-实际修改第一个参数的情况。如果它被修改但不执行实际分配,它会返回第一个参数的值。 -
我刚开始一个干净的会话,现在和你一样。似乎某些包修改了原语。
-
@JoshuaUlrich 为什么不呢?我认为,如果您尝试以某种方式“破坏”该语言并了解您所做的事情背后的方式和原因,那么您将成为一个更好的程序员!我觉得这很有趣。
标签: r variable-assignment