我喜欢用函数编写一个函数ddply,根据两列的名称输出汇总统计信息data.frame mat.
mat是一个很大data.frame的列名称"metric", "length", "species", "tree", ...,"index"
index 是两个级别的因素 "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
}
Run Code Online (Sandbox Code Playgroud)
我希望在调用后输出看起来像这样 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.
....
Run Code Online (Sandbox Code Playgroud)
目前该功能无法产生所需的输出?应该在这做什么修改?
谢谢你的帮助.
这是一个玩具的例子
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))
)
Run Code Online (Sandbox Code Playgroud)
正如尼克在他的回答中所写,您不能使用$引用作为角色名称传递的变量。当您编写时X$arg1,然后R搜索名为 的"arg1"列data.frame X。X[,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")
Run Code Online (Sandbox Code Playgroud)
玩具数据的输出是:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2906 次 |
| 最近记录: |