1

「ポインタ」は正しい用語ではないことは知っていますが、十分に近いことを願っています。私は次のコードを持っています:

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

attach()の後、Rは変数ごとに1つのオブジェクトを作成したようです。しかし、データセットに直接アクセスして新しい変数を作成した後、その変数用に作成された新しいオブジェクトはありません。

Rにもアイリスの新しいオブジェクトを作成させたい場合、アイリスの新しい変数をどのように作成すればよいですか?

更新:多くのRベテランがattach()を使用しないことを提案していることを私は知っています。しかし、私は重いデータ操作(何百もの新しい変数)を行う必要があり、それらすべてに対してtransform(df、)を順番に呼び出すのは非常に面倒です。RでSASデータステップと同様のことを行うことは可能ですか?1つのデータステップ内で変数を作成し、その直後にそれを参照できます。

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

更新2:私が考えることができる1つの方法は、を使用し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 に答える