2016-09-19 8 views
2

この行は、Javaプログラマが理解することができる私にとっては本当に難しいです。私は '< - '、演算子は、代入演算子だと思います。しかし、どのように私は内部のサブプロセスを理解することができます。 c(5,4)は2つの値を持つベクトルを作成し、dim関数の入力にどのようにこの値を渡しますか?この慣習は私にはこれに精通していないのは良くありません。パラメータを挿入するためのdim()関数の規則

dim(m) <- c(5,4) # Dimensions set to 5 & 4, so m is now a 5x4 matrix 

答えて

2

これはしばしば「構文的砂糖」と呼ばれます。

Rのオブジェクトは理論的には変更できません。何かやって:

dim(m) = c(4,5) 

することは、mを変えているように見えますが、実際には構文木はのようになり書かれている:

Dは別の行列から行列を構築する機能です
m = D(m, c(4,5)) 

と新しい次元の集合。前のmはおそらくガーベジコレクションのためにアップされていて、名前mは現在、リサイズされたマトリックスを指しています。このような

糖衣構文は、Bが元aからベクトルを作成しますが、コンストラクタ関数であるa = B(a,1,2)として構文ツリーで表されa[1]=2、などのオブジェクトが変異するように見えるほとんどの場所にRで使用され最初の値は2に設定されます。

注:これらの割り当て機能、上記の例のDBが実際にRにdim<-[<-という名前が付いてい<-と関数名は少し奇妙に見えるが、完全にRで許容識別子ですので、私は明確にするためDBと呼ばれます

+0

'* < - '関数では本当に言いますが、 '<<'関数は(少なくとも最近のRバージョンでは)参考*。例えば ​​'require(data.table); a <-1:10; address(a); a [7L] < - 11L; address(a)'のようにしてください。 – nicola

+0

@nicolaで[< - それはどういう意味ですか? – verystrongjoe

+0

そしてインスタンスを試しました。しかし、私は何度も試みました。すべてが同じだった – verystrongjoe

0

あなたは<-正しい代入演算子(ほぼすべての状況で、それは=演算子と同じです)です。

あなたは

dim(m) <- c(5, 4) 

を実行すると、あなたが実際にこの関数もヘルプページ?dim<-を持って

dim<- 

関数を呼び出しています。

# Vectors 
x[1] = 10 
## Data frames 
df[1, 2] = 50 
+0

だから、演算子は左側の値に値を割り当てるだけでなく、左側の関数にパラメータを割り当てることを意味しますか? – verystrongjoe

+0

私はあなたのコメントを理解していれば、そうです – csgillespie

1

あなたがdim(m) <- *を行うと、あなたが実際に設定し異なる機能を呼び出している:だから

dim(m) <- c(5, 4) 

m <- `dim<-`(m, c(5, 2)) 

これはRで非常に一般的であると等価ですmの寸法。この機能はdim<-です。

これは、指定されたサイズで新しい行列が返されるということです。 Rパーサーは、元の構文をdim<-への呼び出しに変換するタスクを処理します。

names(*) <-,class(*) <-などの他の割り当て操作でも同じことが起こります。 m[a, b] <-のようなサブセットに割り当てると、この場合の機能も[<-になります。

関連する問題