我知道“指针”不是正确的术语,但我希望它足够接近。我有以下代码:
> attach(iris)
> iris$x <-0
> x
Error: object 'x' not found
似乎在attach()之后,R为每个变量创建了一个对象。但是在通过直接访问数据集创建新变量之后,没有为该变量创建新对象。
如果我想让R为它创建一个新对象,我该如何为虹膜创建一个新变量?
更新:我知道很多R老兵建议不要使用attach()。但我需要做大量数据操作(数百个新变量),并且按顺序调用transform(df,)会非常麻烦。在R中是否可以执行类似于SAS datastep的操作,在一个数据步骤中,您可以创建变量并在之后立即引用它:
data A;
set A;
varA = varB > 1;
varC = var A + varB;
....
run;
更新2:我能想到的一种方法是使用attach()
,然后在cbind
之前创建数百个数组然后detach()
谢谢。
答案 0 :(得分:4)
attach()
没有做过那种事;它刚刚在搜索路径上放置了一个对象副本,允许R在查找名称时查看对象内部。
上面的关键词是“复制”。这解释了你看到的行为;搜索路径上iris
的副本不是全局工作空间中的副本,而您正在修改后者而不是前者。
简单回答是不要使用attach()
。要将变量添加到对象,请查看transform()
和within()
。
iris <- transform(iris, x = rep(0, nrow(iris)))
或
iris <- within(iris, x <- rep(0, nrow(iris)))
要直接在对象中使用组件,可以使用with()
,例如
with(iris, length(x))
我建议您阅读相关帮助文件以获取使用示例等。