我刚刚发现它`[<-`可能具有破坏性的副作用,或者取决于它给出的参数.
例
x <- 1:5
x
# [1] 1 2 3 4 5
`[<-`(x, 1:5, 1)
# [1] 1 1 1 1 1
x
# [1] 1 2 3 4 5 # ? last application of `[<-` was non-destructive
`[<-`(x, 1:5, TRUE)
# [1] 1 1 1 1 1
x
# [1] 1 1 1 1 1 # ? the last application of `[<-` had a destructive side-effect
Run Code Online (Sandbox Code Playgroud)
问:是否有一个普遍可靠地防止破坏性的行为,或反对它至少后卫呢?(简而言之,`[<-`完全避免.)
笔记
我无法在文档(?`[<-`)中找到我的问题的答案; 一般来说,我有一段时间找到关于()类型"替换"操作符的任何官方文档?`...<-`(我甚至不知道它们被称为什么),并且没有一个正面解决副作用的问题.
当然,就我所知,即使是我称之为"非破坏性"的行为,也可能还有其他一些我不知道的副作用.
对于上面的简单示例,表达式as.logical(`[<-`(x, 1:5, 1))具有与其相同的值`[<-`(x, 1:5, TRUE),并保留相同的单行功能,但没有(明显的)副作用.然而,这种替代方案不是该问题的一般解决方案.
更新(响应BrodieG的要求)
$ R --quiet --no-save --no-restore
> x <- 1:5
> x
[1] 1 2 3 4 5
> `[<-`(x, 1:5, TRUE)
[1] 1 1 1 1 1
> x
[1] 1 1 1 1 1
> sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 8 (jessie)
locale:
[1] LC_CTYPE=en_US.utf8 LC_NUMERIC=C
[3] LC_TIME=en_US.utf8 LC_COLLATE=en_US.utf8
[5] LC_MONETARY=en_US.utf8 LC_MESSAGES=en_US.utf8
[7] LC_PAPER=en_US.utf8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.utf8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |