5

ddplyの 2 つの列の名前に基づいて要約統計を出力する関数を作成するのが好きですdata.frame mat

  • matdata.frame列の名前を持つ大きなです"metric", "length", "species", "tree", ...,"index"

  • indexは2水準の因数です"Short", "Long"

  • "metric", "length", "species", "tree"その他はすべて連続変数

関数:

summary1 <- function(arg1,arg2) {
    ...

    ss <- ddply(mat, .(index), function(X) data.frame(
        arg1 = as.list(summary(X$arg1)),
        arg2 = as.list(summary(X$arg2)),
        .parallel = FALSE)

    ss
}

呼び出した後、出力は次のようになると思いますsummary1("metric","length")

Short metric.Min. metric.1st.Qu. metric.Median metric.Mean metric.3rd.Qu. metric.Max. length.Min. length.1st.Qu. length
.Median length.Mean length.3rd.Qu. length.Max. 

....

Long metric.Min. metric.1st.Qu. metric.Median metric.Mean metric.3rd.Qu. metric.Max. length.Min. length.1st.Qu. length
.Median length.Mean length.3rd.Qu. length.Max.

....

現時点では、関数は目的の出力を生成しませんか? ここでどのような変更を行う必要がありますか?

ご協力いただきありがとうございます。


おもちゃの例はこちら

mat <- data.frame(
    metric = rpois(10,10), length = rpois(10,10), species = rpois(10,10),
    tree = rpois(10,10), index = c(rep("Short",5),rep("Long",5))
)
4

2 に答える 2

4

ニックが彼の答えに書いたように、文字$名として渡された変数を参照するために使用することはできません。書いたら、 inという名前の列X$arg1R検索します。またはで参照できます。"arg1"data.frame XX[,arg1]X[[arg1]]

適切な名前の出力が必要な場合は、以下の解決策を提案します。

summary1 <- function(arg1, arg2) {

    ss <- ddply(mat, .(index), function(X) data.frame(
        setNames(
            list(as.list(summary(X[[arg1]])), as.list(summary(X[[arg2]]))),
            c(arg1,arg2)
            )), .parallel = FALSE)

    ss
}
summary1("metric","length")

おもちゃデータの出力は次のとおりです。

  index metric.Min. metric.1st.Qu. metric.Median metric.Mean metric.3rd.Qu.
1  Long           5              7            10         8.6             10
2 Short           7              7             9         8.8             10
  metric.Max. length.Min. length.1st.Qu. length.Median length.Mean length.3rd.Qu.
1          11           9             10            11        10.8             12
2          11           4              9             9         9.0             11
  length.Max.
1          12
2          12
于 2011-04-19T11:51:14.693 に答える
1

これはあなたが望むものにもっと似ていますか?

summary1 <- function(arg1,arg2) {
ss <- ddply(mat, .(index), function(X){ data.frame(
    arg1 = as.list(summary(X[,arg1])),
    arg2 = as.list(summary(X[,arg2])),
    .parallel = FALSE)})
ss
}
于 2011-04-19T11:02:46.810 に答える