2016-04-08 12 views
0

apply(またはapplyのバリエーション)がここに含まれています。データフレームのi番目の行を取り出し、ベクトルのi番目の要素で減算します。

以下を考慮してください

x <- matrix(c(1, 2, 
       3, 4), 
      ncol = 2, 
      nrow = 2, 
      byrow=TRUE) 
y <- c(1, 2) 

Iは、I = 1の場合、Yのi番目の成分をXのi番目の行を取り、そこから減算したい、2

最終出力

 [,1] [,2] 
[1,] 0 1 
[2,] 1 2 

する必要があります私は多分

apply(X = x, MARGIN = 1, FUN = '-', y) 

    [,1] [,2] 
[1,] 0 2 
[2,] 0 2 
を考えました

はトリックを行いますが、これは間違っています。私の推測はここで起こっているのは、xの各行が2次元のベクトルとして扱われ、次にyから減算されていることです(そして、何らかの理由でapplyがこの結果を転置するという前のクラスを思い出します)。

私は特に、行列とベクトルを合わせてcbindにすることなく、これを行うことに興味があり、計算フィールドを作成します。

答えて

1

はあなただけで行うことができると思います:

> x - y 
    [,1] [,2] 
[1,] 0 1 
[2,] 1 2 
+0

私の数学の脳はこれを理解するが、あなたに感謝していません。 – Clarinetist

+1

@Clarinetistこれは、R行列が列ベクトルとして順序付けられているという事実と組み合わされた、Rがリサイクルと呼ばれる興味深い特性です。 yの最初の要素がx [1,2]に適用されるように、ベクトルyが最初に要素x [1,1]に適用され、yの2番目の要素はx [2,1]にリサイクルされ、2番目の要素のyはx [2,2]に適用される。リサイクルの仕組みを感じるには、さまざまな長さのベクトルを減算して遊んでください。 '1:10 - 1:5'または' 1:10 - 1:3'または '1:3 - 1:5'のいずれかです。 – lmo

関連する問題