こんにちは、次の行を実行し、少し驚いた。混乱インライン:スコープ/パラメータ渡しの混乱R
[OK]をので、私はリストを作成します。
> x<-list()
は、私がXに
あるものを見るように頼む ""> x$a<-1
でインデックス化要素である1を割り当てます
> x
$a
[1] 1
これまでのように良い
次の私はそれに渡されたリストがかかりますし、インデックスへの代入のように「」私はちょうど私がXで関数を呼び出す2
> foo<-function(xx) {
+ xx["b"]<-2
+ print(xx)
+ }
インデックス「B」の値に割り当てます関数を宣言 - 私は私が見るものが好き 今、私の考えは、リストオブジェクトは、(あなたが& Xを行う際にCのように参照することによって)渡されました、それは破壊的に私はXの印刷機能の本体の外に今
> foo(x)
$a
[1] 1
$b
[1] 2
に変更されたということです - しかし見ることに驚いたb
> x
$a
[1] 1
>
私は汲み取りとパラメータ渡しのドキュメントを読みましたが、これを理解できませんでした。関数本体が呼び出される前にリストが深くまたは浅くコピーされていますか?
あなたは 'assign'か' x < - foo(x) ' – akrun
のどちらかを使う必要があります。そうすれば、変更されたリストを返してそれを再割り当てする必要があると言います。私はグラフウォーカーを書いているので、エレガントな解決策ではありません...私は割り当てを見てみましょう。もう一度おねがいします – user975917
'私の考えは、リストオブジェクトが(Cのように参照によって)渡されたことです。初めて私はCが参照渡しを聞いた。ところで、Rは*機能*プログラミング言語です。関数の引数はコピーされ、その変更は関数スコープ外には保持されません。 – nicola