Rの意味と文法を理解するのに苦労しています。ローカル変数は関数内で変更することはできません。R内の関数内で非グローバル変数を変更できますか?
たとえば、この基本コードでは、foo()
関数を呼び出すと、heatmap.matrix
変数が更新されることが予想されます。
heatmap.matrix <- matrix(rep(0,40000), nrow=200, ncol=200)
# foo function should just update a single cell of the declared matrix
foo <- function() { heatmap.matrix[40,40] <- 100}
heatmap.matrix[40,40]
[1] 0
foo()
heatmap.matrix[40,40]
[1] 0
# there I expected it to return 100. Yet if I do it out of the function:
heatmap.matrix[40,40] <- 100
[1] 100
これは、関数がを評価した後、変数の範囲が戻されていないことを信じて私をリードしています。 これはRの場合ですか?他に何か起こっていますか?私は本当に何が起こっているのにハングアップしていないように感じる。どんな助けや洞察力も本当にありがとう!
私のコードでは、周波数表にx
とy
という列があり、頻度表のエントリに対応する値を持つ2次元行列に変換しようとしていますが、対応するエントリがない場合はゼロを返します。しかし、私はapply関数内で行列を変更できません。
です。二重代入演算子 '<< - 'は関数外の変数を修正するために使用されます。また、[functions](http://adv-r.had.co.nz/Functions.html)を読んで、lexical scoping – SymbolixAU
'foo()'は 'heatmap.matrix'のコピーをとり、それを内部で修正します関数。グローバル 'heatmap.matrix'は変更されません。多くの場合、Rはオブジェクトのコピーをとり、変更を加えた後、 'foo < - function(){heatmap.matrix [40,40] < - 100; heatmap.matrix} ' – thelatemail
ローカル環境の外部に' << - 'を付けることはできますが、一般に悪い形式です。変更されたオブジェクトを返すほうがよいので、コードから変数を再割り当てしていることは明らかで、目に見えない変更はありません。 '<< - 'はまたあなたの構造や変数名(そして他の親環境のもの)によっては、意図した場所を割り当てられないかもしれないので、あなたにバグや悪いことにあなたが関数を与えたソースコードを持っていない人 – alistaire