1

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

> attach(iris)
> iris$x <-0
> x
Error: object 'x' not found

似乎在 attach() 之后,R 为每个变量创建了一个对象。但是在我通过直接访问数据集创建新变量后,没有为该变量创建新对象。

如果我希望 R 也为它创建一个新对象,我应该如何为 iris 创建一个新变量?

更新:我知道很多 R 的老手建议不要使用 attach()。但是我需要进行大量的数据操作(数百个新变量),并且按顺序对每个人调用 transform(df,) 会非常麻烦。是否可以在 R 中执行类似于 SAS 数据步的操作,在一个数据步中,您可以创建一个变量并在之后立即引用它:

 data A;
 set A;
 varA = varB > 1;
 varC = var A + varB;
 ....
 run;

更新 2:我能想到的一种方法是使用attach(),然后创建数百个数组,然后再创建cbind它们,detach() 谢谢。

4

1 回答 1

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

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

于 2012-11-28T07:38:44.447 回答