以下示例显示,即使x
在附加后发生了更改,也不会更改值a
。 attach()
是否会复制对象x
?有没有办法改变由x
保存的attach()
?
R> x=list(a=1,b=2)
R> attach(x)
R> search()
[1] ".GlobalEnv" "x" "package:stats"
[4] "package:graphics" "package:grDevices" "package:utils"
[7] "package:datasets" "package:methods" "Autoloads"
[10] "package:base"
R> x$a=2
R> search()
[1] ".GlobalEnv" "x" "package:stats"
[4] "package:graphics" "package:grDevices" "package:utils"
[7] "package:datasets" "package:methods" "Autoloads"
[10] "package:base"
R> a
[1] 1
R>
答案 0 :(得分:2)
当我们attach(x)
在名为x
的搜索列表上创建新条目但变量x
仍然引用工作区中的原始列表时。因此,如果我们分配给x$a
,我们将分配给工作空间中的原始x
,而不是分配给搜索列表中的新条目。即使我们删除了原始列表x
,也无法使用语法x$a
来引用搜索列表中新条目中的a
;但是,有一些替代方案可行。首先启动一个新的R会话,以确保没有剩余的垃圾。然后试试这个:
# define a list and attach it
x <- list(a = 1, b = 2)
attach(x)
# a few different ways of assigning to a in x on the search list
# 1
assign("a", 99, "x")
a
## [1] 99
# 2
env_x <- as.environment("x")
env_x$a <- 100
a
## [1] 100
# 3
a <<- 200
a
## [1] 200
env_x$a
## [1] 200
# the a in the original list x is unchanged
x$a
## [1] 1
这是令人困惑和麻烦的,通常的建议是不首先使用attach
。