行列 - R言語での代入



r 変数名 取得 (2)

代入がR言語でどのように機能するのか疑問に思います。

次のRシェルセッションを考えます。

> x <- c(5, 6, 7)
> x[1] <- 10
> x
[1] 10 6 7
>

私はそれを完全に理解しています。 ベクトル(5、6、7)が作成され、シンボル 'x'にバインドされます。 後でベクトルは不変のデータ構造であるため、 'x'は新しいベクトル(10、6、7)にリバウンドします。

しかし、ここで何が起こります:

> c(4, 5, 6)[1] <- 10
Error in c(4, 5, 6)[1] <- 10 :
  target of assignment expands to non-language object
>

またはここ:

> f <- function() c(4, 5, 6)
> f()[1] <- 10
Error in f()[1] <- 10 : invalid (NULL) left side of assignment
>

私には( 'x'のような)名前付きデータ構造にしか値を代入できないようです。

私が求めているのは、私がR言語コアを実装しようとしているからであり、そのような割り当てをどう処理するかわからないからです。

前もって感謝します

https://src-bin.com


Answer #1

この質問に対する@ Owenの回答にx[1] <- 10x[1] <- 10は本当に2つのことをしています。 それは[<-関数を呼び出していて、その呼び出しの結果をxに代入しています。

それであなたがあなたのc(4, 5, 6)[1] <- 10結果を達成したいものは次のとおりです。

> `[<-`(c(4, 5, 6),1, 10)
[1] 10  5  6

Answer #2

無名関数に変更を加えることはできますが、無名ベクトルへの代入はありません。 Rでも名前付きの一時コピーを作成すると、その事実を反映したエラーメッセージが表示されることがあります。 これは、「サブセット代入」および他の代入形式の式の評価を扱う21ページのR言語定義で読むことができます。

x[3:5] <- 13:15 
# The result of this commands is as if the following had been executed 
`*tmp*` <- x 
x <- "[<-"(`*tmp*`, 3:5, value=13:15) 
rm(`*tmp*`) 

そして、次の[<-への呼び出しで上書きされるので、 *tmp*をオブジェクト名として使用しないように警告があります。





variable-assignment