1. ホーム
  2. r

[解決済み] スイープ」機能の使い方

2022-02-08 15:36:16

質問事項

R Packagesのソースを見ると、以下のような関数があります。 sweep がよく使われます。 もっとシンプルな関数で十分なのに、それが使われていることもある(例. apply ), また、このコードが何を行っているのか、正確に知ることができない場合もあります。 そのコードブロックに相当な時間をかけて、順を追って説明しています。

を再現できるようになったこと。 sweep の効果は、より単純な関数を使って得られるということです。 を理解していない。 sweep この関数が頻繁に使われるということは、かなり有用であることを示唆しています。

コンテキストのことです。

sweep はRの標準ライブラリにある関数で、引数は以下の通りです。

sweep(x, MARGIN, STATS, FUN="-", check.margin=T, ...)

# x is the data
# STATS refers to the summary statistics which you wish to 'sweep out'
# FUN is the function used to carry out the sweep, "-" is the default

見ての通り、引数は apply とはいえ sweep が必要です。 というパラメータを追加しました。 STATS .

もう一つの重要な違いは sweep の配列を返します。 同じ形 が返す結果は、入力配列と同じです。 apply は、渡された関数に依存する。

sweep を実行中です。

# e.g., use 'sweep' to express a given matrix in terms of distance from 
# the respective column mean

# create some data:
M = matrix( 1:12, ncol=3)

# calculate column-wise mean for M
dx = colMeans(M)

# now 'sweep' that summary statistic from M
sweep(M, 2, dx, FUN="-")

     [,1] [,2] [,3]
[1,] -1.5 -1.5 -1.5
[2,] -0.5 -0.5 -0.5
[3,]  0.5  0.5  0.5
[4,]  1.5  1.5  1.5

要するに、私が求めているのは、「Science」「Science」「Science」の典型的な使用例なのです。 sweep .

Rドキュメントやメーリングリストなど、Rの「主要な」ソースを引用したり、リンクを張ったりしないでください。私が興味があるのは、経験豊富なRプログラマーやアナリストが、どのように sweep を自分のコードに組み込んでいます。

解決方法は?

sweep() は通常,行列を行または列で操作する場合に使用され,操作のもう一方の入力は各行/列で異なる値です.行と列のどちらで演算するかは,MARGINで定義されます。 apply() . 私が "他の入力" と呼んだものに使われる値は、STATS で定義されています。 つまり、各行(または列)に対して、STATSから値を取り出し、FUNで定義された操作で使用することになります。

例えば、定義した行列の1行目に1、2行目に2などを足したい場合は、次のようになります。

sweep (M, 1, c(1: 4), "+")

私も正直なところ、Rのドキュメントにある定義が理解できず、例を調べて学んだだけです。