指向attach()中新创建的变量的指针

时间:2012-11-28 06:24:11

标签: r

我知道“指针”不是正确的术语,但我希望它足够接近。我有以下代码:

> 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() 谢谢。

1 个答案:

答案 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))

我建议您阅读相关帮助文件以获取使用示例等。