【发布时间】:2019-09-09 06:44:51
【问题描述】:
我围绕ftable 编写了一个包装器,因为我需要为许多变量计算带有频率和百分比的平面表:
mytable <- function(...) {
tab <- ftable(...,
exclude = NULL)
prop <- prop.table(x = tab,
margin = 2) * 100
bind <- cbind(as.matrix(x = tab),
as.matrix(x = prop))
margin <- addmargins(A = bind,
margin = 1)
round(x = margin,
digits = 1)
}
mytable(formula = wool + tension ~ breaks,
data = warpbreaks)
A_L A_M A_H B_L B_M B_H A_L A_M A_H B_L B_M B_H
10 0 0 1 0 0 0 0.0 0.0 11.1 0.0 0.0 0.0
12 0 1 0 0 0 0 0.0 11.1 0.0 0.0 0.0 0.0
13 0 0 0 0 0 1 0.0 0.0 0.0 0.0 0.0 11.1
14 0 0 0 1 0 0 0.0 0.0 0.0 11.1 0.0 0.0
15 0 0 1 0 0 2 0.0 0.0 11.1 0.0 0.0 22.2
...
Sum 9 9 9 9 9 9 100.0 100.0 100.0 100.0 100.0 100.0
但是,我不能将来自ftable 的子集参数与我的函数一起使用,也不能与最小的mytable <- function(...) ftable(...) 一起使用:
mytable(formula = wool + tension ~ breaks,
data = warpbreaks,
subset = breaks < 20)
Error in eval(substitute(subset), data, env) :
..3 used in an incorrect context, no ... to look in
我知道我可以使用data = warpbreaks[warpbreaks$breaks < 20, ] 作为解决方法在数据参数中进行子集化,但我希望提高我对 R 的了解。“Advanced R”帮助我了解错误是由于非标准评估引起的,但我没有设法更正我的代码。
所以我的问题是:
- 如何告诉 R 在
warpbreaks中查找breaks? - 更一般地说,是否有更明显的基本 R 方法来计算单个变量和多个变量在垂直布局中具有频率和百分比的平面表? (我可以使用
mytable(x = warpbreaks$tension, row.vars = 1)获得单个变量的垂直布局。)
【问题讨论】:
-
问得很好,恭喜。如果我对问得不好的问题给出反馈,我觉得我应该用一个很好的可重复的例子来推荐这种结构良好的问题。
-
@PavoDive 谢谢!
标签: r function subset evaluation ellipsis