我有一个现有的工作流程,我使用 ez::ezANOVA 将方差分析(ANOVA)应用于按因子分割的数据帧的每个部分 . 我想使用 plyr 中的 ddply 将我的旧版本更新为使用 dplyr 的新版本 . 这是一个适用于 ddply 的玩具示例:

require(dplyr)
require(plyr)
require(ez)

X = data.frame(
  x1 = rep(factor(letters[1:2]), 20),
  x2 = rep(factor(letters[1:2]), 10, each = 2),
  id = factor(sort(rep(1:10, 4)))
)

# stack individual data frames into one large data frame
df = X[rep(seq_len(nrow(X)), 10),]

# add an index column to track group
df$grp = sort(rep(1:10, nrow(X)))

# add an arbitrary outcome variable
df$y = runif(400)

# define a function that extracts p-values from ezANOVA output
PVals = function(df) {
  ezANOVA(
    data = df, dv = y, wid = id, 
    within = .(x1, x2))[[1]][5]
}

我用ddply得到了我想要的东西:

ddply(df, .(grp), PVals)

我想使用dplyr方法:

df %>% group_by(grp) %>% do(PVals(.))

但这会产生错误:

ezANOVA_main中的错误(data = data,dv = dv,wid = wid,within = within,:“dv”必须为数字 .

所以我的假设是 group_by 返回的对象不包含与原始数据框相同的变量类?我该如何解决这个问题?