10.3.7.2 列並行の使用例
この例では、Rのsummary
関数を使用して、iris
データセットの最初の4つの数値列でサマリー統計を並行して計算します。
例10-13 ore.indexApply関数の使用および結果の結合
この例では、計算を最終結果に結合します。ore.indexApply
関数の最初の引数は4で、これは、並行してまとめる列の数を指定します。ユーザー定義の入力関数は1つの引数index
を取り、これは、まとめる列を指定する1から4の値です。
この例では、summary
関数を指定した列でコールします。summary
の呼出しでは、列のサマリー統計が含まれている単一の行が返されます。この例では、summary
呼出しの結果をdata.frame
に変換し、そこに列名を追加します。
次に、ore.indexApply
関数に対してFUN.VALUE
引数を使用して、関数の結果の構造を定義します。結果はその後、その構造とともにore.frame
オブジェクトとして返されます。
%r
res <- ore.indexApply(4,
function(index) {
ss <- summary(iris[, index])
attr.names <- attr(ss, "names")
stats <- data.frame(matrix(ss, 1, length(ss)))
names(stats) <- attr.names
stats$col <- names(iris)[index]
stats
},
FUN.VALUE=data.frame(Min. = numeric(0),
"1st Qu." = numeric(0),
Median = numeric(0),
Mean = numeric(0),
"3rd Qu." = numeric(0),
Max. = numeric(0),
Col = character(0)),
parallel = TRUE)
res
出力は、次のようなものです。
表10-9 data.frame: 4 x 7
Min. | X1st.Qu. | Median | Mean | X3rd.Qu. | Max. | Col |
---|---|---|---|---|---|---|
<dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <chr> |
4.3 | 5.1 | 5.80 | 5.843333 | 6.4 | 7.9 | Sepal.Length |
2.0 | 2.8 | 3.00 | 3.057333 | 3.3 | 4.4 | Sepal.Width |
1.0 | 1.6 | 4.35 | 3.758000 | 5.1 | 6.9 | Petal.Length |
0.1 | 0.3 | 1.30 | 1.199333 | 1.8 | 2.5 | Petal.Width |
この例のリスト
R> res <- ore.indexApply(4,
+ function(index) {
+ ss <- summary(iris[, index])
+ attr.names <- attr(ss, "names")
+ stats <- data.frame(matrix(ss, 1, length(ss)))
+ names(stats) <- attr.names
+ stats$col <- names(iris)[index]
+ stats
+ },
+ FUN.VALUE=data.frame(Min. = numeric(0),
+ "1st Qu." = numeric(0),
+ Median = numeric(0),
+ Mean = numeric(0),
+ "3rd Qu." = numeric(0),
+ Max. = numeric(0),
+ Col = character(0)),
+ parallel = TRUE)
R> res
Min. X1st.Qu. Median Mean X3rd.Qu. Max. Col
1 2.0 2.8 3.00 3.057 3.3 4.4 Sepal.Width
2 4.3 5.1 5.80 5.843 6.4 7.9 Sepal.Length
3 0.1 0.3 1.30 1.199 1.8 2.5 Petal.Width
4 1.0 1.6 4.35 3.758 5.1 6.9 Petal.Length
Warning message:
ORE object has no unique key - using random order
親トピック: ore.indexApply関数の使用