applyを使って多くのデータを持つ関数を評価することができますが、1つのデータを使って多くの関数を評価できますか? はsapply私は得ることができます使用:複数の関数を1つのデータで評価するR
sapply(list(1:5,10:20,5:18), sum)
をしかし、私はこのようなsomethnigたい:
sapply(1:5, list(sum, min,max))
と
15 1 5
どれでも巧妙なアイデアを得ますか? :)
applyを使って多くのデータを持つ関数を評価することができますが、1つのデータを使って多くの関数を評価できますか? はsapply私は得ることができます使用:複数の関数を1つのデータで評価するR
sapply(list(1:5,10:20,5:18), sum)
をしかし、私はこのようなsomethnigたい:
sapply(1:5, list(sum, min,max))
と
15 1 5
どれでも巧妙なアイデアを得ますか? :)
スワップ引数の順序を使用して、あなたは機能を超えていないループしているので、データ。
sapply(list(sum, min, max), function(f) f(1:5))
要約統計量を計算するための2つの最も好ましい近代的なアプローチはdplyr
とdata.table
パッケージを使用しています。 dplyr
には、summarise
またはsummarise_each
を使用してさまざまなソリューションが用意されています(ベクターではなく、データフレームでのみ動作します)。
library(dplyr)
data <- data.frame(x = 1:5)
summarise(data, min = min(x), max = max(x), sum = sum(x))
summarise_each(data, funs(min, max, sum))
dplyr
-idiomaticスタイルはchainingを使用して式を構築することです。プログラムによる使用のため
data %>%
summarise(min = min(x), max = max(x), sum = sum(x))
data %>%
summarise_each(funs(min, max, sum))
(インタラクティブな使用とは対照的に)、アンダー・サフィックス機能とformulaeはnon-standard evaluationために推奨されています。
data %>%
summarise_(min = ~ min(x), max = ~ max(x), sum = ~ sum(x))
data %>%
summarise_each_(funs_(c("min", "max", "sum"), "x")
data.table
解決のためagstudy's answerを参照してください。
多くのデータで多くの機能を評価できます。 plyr
から
sapply(list(1:5,10:20,5:18), function(x) c(Sum = sum(x) , Min = min(x) , Max = max(x)))
# [,1] [,2] [,3]
#Sum 15 165 161
#Min 1 10 5
#Max 5 20 18
summarize
を使用して:ちょうどこのような無名関数を使用し
library(plyr)
summarize(data.frame(x=1:5),min=min(x),max=max(x),sum=sum(x))
min max sum
1 1 5 15
かをdata.table
library(data.table)
data.table(x=1:5)[,list(min=min(x),max=max(x),sum=sum(x))]
min max sum
1: 1 5 15
もう1つはポットに追加できます。大きなリストを扱うためのニース。
funs <- list(sum = sum, min = min, max = max)
Map(function(f, ...) f(...), funs, list(x = 1:15))
# $sum
# [1] 120
#
# $min
# [1] 1
#
# $max
# [1] 15