を使用していて気になったのは以下の点'[<-'
です。要素を置き換えることはできますが、ベクターに要素を追加することはできません。
例:
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 のコメントに関する更新。
この動作は、オブジェクトの値が最初に割り当てられた方法に関連付けられているようです。たとえば、に割り当てられた値が[<-の動作に対してVarX
isに割り当てられた場合、以下に示すように異なる結果が得られます。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