2016-07-25 5 views
1

初心者くさい適用するために、複数のarguementsに渡す - その後、私は好きだろうか....助けてイマイチgoogleのいくつかの基本的な構文を把握することができないと言葉の共通ネスを与えられたのここ/ sapply sytnax

mtcars$testcol = 'testing' 
imgood = sapply(mtcars, IQR, na.rm=T) #works ok... helpme = 
sapply(mtcars, quantile c(.3,.9, .95, na.rm=TRUE) #don't know how to 

を行うには

はまた、私は、summarise_allとdplyr :: あるTHER summarise_eachを見てきた... sapply /適用とパラメータのちょうど

mtcars$mynewcolumn = imgood....etc 

パスですこれがここで働く方法?

+1

サプリー(mtcars、function(x){ quantile(x、c(.3、.9、.95、na.rm = TRUE)) }) '' '? – Abdou

+0

これは誤字です。あなたはコンマ 'サプリーがありませんでした(mtcars、quantile、c(.3、.9、.95、na.rm = TRUE))' –

+0

これは、上記のように数値ではない列に追加するまで機能します。私は----サプリー(mtcars、function(x){ifelse(is.numeric(x)、quantile(x、c(.3、.9、na.rm = TRUE))、 'xxx' })----しかし、私はマルチプル値の出力を得ません – scbears88

答えて

1

残念ながらquantileは、NAの単一のNAのベクトルを返すようには設計されていません。それはNAのを繰り返す分位数に渡された二番目の引数を抽出する必要があるため、

my_quantile <- function(x, ...) if (is.numeric(x)) {quantile(x,...)} else { 
               z <- list(...)[[1]]; rep(NA,length(z))} 

> sapply(mtcars, my_quantile, c(.3,.9, .95), na.rm=TRUE) 
     mpg cyl disp  hp drat  wt qsec vs am gear carb testcol 
30% 15.98 4 142.06 106.20 3.1500 2.77300 17.0200 0 0 3 2.0  NA 
90% 30.09 8 396.00 243.50 4.2090 4.04750 19.9900 1 1 5 4.0  NA 
95% 31.30 8 449.00 253.55 4.3145 5.29275 20.1045 1 1 5 4.9  NA 

は、それはおそらくあなたが書くと最初の関数ではありません。これはあなたが望んでいたように行動でしょう囲んで関数を書くことができ起こることを取得するには他の分位数と一致する回数は、sapplyがリストではなく行列を再試行できるようにします。あなたの議論に名前をつけていないので、やはり少し壊れやすいでしょう。 probsの名前が付けられていた場合、最初のものではなかった可能性があります。したがって、match.argsprobsの引数を見つけることができたかどうかを確認し、失敗した場合は... -argument-list 。

関連する問題