2

R: a、b、c、d、e、f、g、h の 8 つのタイプで分類された 1 つの列を持つ行列があります。他の列のデータを使用して、型ごとに異なる計算を行う必要があります。switch() 関数を使用して、各タイプのループを自動化し、各タイプの差分計算を記述したいと考えています。ただし、私がオンラインで見ているものはすべて、各スイッチの 1 行スイッチ計算の構文の例のみを示しています。

これは、switch() ヘルプで提供されているコードを使用した例です。mean() が関数であることは知っていますが、この例では、構文がわからないことを説明したいだけなので、関数ではないとしましょう (オンラインの調査では明確に述べられていません)。 :

centre <- function(x, type) {
  switch(type,
     mean = {
           total.sum<-sum(type)
           mean = total.sum/length(type)
     },
     median = median(x),
     trimmed = mean(x, trim = .1))
}
4

1 に答える 1

8

誤解はあなたの例のタイプミスから来ていると思います:

 mean = {
       total.sum<-sum(type)
       mean = total.sum/length(type)
 },

する必要があります

 mean = {
       total.sum<-sum(x)
       mean = total.sum/length(x)
 },

この変更を行うと、期待どおりに動作します。

ETA: あなたのコメントで何が問題なのかわかりません。次のコードを試してください。

set.seed(1)

centre <- function(x, type) {
  switch(type,
     mean = {
           total.sum<-sum(x)
           mean = total.sum/length(x)
     },
     median = median(x),
     trimmed = mean(x, trim = .1))
}

x <- rcauchy(10)
print(centre(x, "mean"))
print(centre(x, "median"))
print(centre(x, "trimmed"))

出力は次のとおりです。

[1] -0.4844658
[1] -0.236111
[1] -0.3632328
于 2012-06-27T01:21:05.520 に答える