0

すべての列のマトリックスで z 変換のための非常に基本的な関数を書きました。次のようになります。

sapply(MyObject, function(x){(x-mean(x))/sd(x)})

マトリックス内のいくつかのセルの関数をランダムにチェックしましたが、うまく機能しているようです。私はRに非常に慣れておらず、インターネット上で良い例を見つけることができなかったので、関数が問題ないことを確認したかった.

4

1 に答える 1

4

scale()どれがこれを行うかを確認する必要があります。

あなたの機能はほぼ正しいです。と関数呼び出しna.rm = TRUEの両方に追加する必要があります。sd()mean()

の代わりに をscale()使用して関数を記述します ( を使用しない場合) 。例えばsweep()sapply()

ztran <- function(x, na.rm = TRUE) {
    mns <- colMeans(x, na.rm = na.rm)
    sds <- apply(x, 2, sd, na.rm = na.rm)
    x <- sweep(x, 2, mns, "-")
    x <- sweep(x, 2, sds, "/")
    x
}

使用中

> df <- data.frame(matrix(1:9, ncol = 3))
> ztran(df)
  X1 X2 X3
1 -1 -1 -1
2  0  0  0
3  1  1  1
> scale(df)
     X1 X2 X3
[1,] -1 -1 -1
[2,]  0  0  0
[3,]  1  1  1
attr(,"scaled:center")
X1 X2 X3 
 2  5  8 
attr(,"scaled:scale")
X1 X2 X3 
 1  1  1

sweepは、この種の操作に非常に便利なベクトル化ツールです。また、行列に単純化されていることにも注意sapply()してください。これは、必要なものではない可能性があります。sweep()これはしません:

> class(ztran(df))
[1] "data.frame"
> class(sapply(df, function(x){(x-mean(x))/sd(x)}))
[1] "matrix"
于 2012-11-02T13:25:10.603 に答える