【发布时间】:2018-03-29 23:13:01
【问题描述】:
我想运行一个自定义函数,该函数使用按组拆分的数据框的特定列。这是我的示例数据和功能代码:
my_data = data.frame(N = c(12, 12, 24, 24, 12, 12),
p = rep(c(.125,.125,.025),2),
group = rep(c("dogs","cats"),each=3))
power.sequential <- function(d, nseq, pseq){
decvec <- NULL
nvec <- NULL
for (i in 1:100){
decvec[i] <- 0
nvec[i] <- 0
j <- 1
x <- NULL
while(decvec[i] == 0 & nvec[i] < sum(nseq)){
x <- c(x, rnorm(nseq[j], mean = d))
p <- t.test(x)$p.value
nvec[i] <- nvec[i] + nseq[j]
if (p < pseq[j]) decvec[i] <- 1
j <- j + 1
}
}
power <- mean(decvec == 1)
meanN <- mean(nvec)
return(list("power" = power, "mean_N" = meanN))
}
现在我想在我的数据框中的每个组上运行这个函数。正常调用函数是这样的:
power.sequential(d = .5,
nseq = c(12,12,24),
pseq = c(.125,.125,.025))
该函数返回两个值,理想情况下,它们将分别保存在我的数据框的单独列中。 这是我最好的尝试,但它给出了一条错误消息:
my_data %>% group_by(group) %>%
mutate(result = power.sequential(d=.5,nseq=N,pseq=p))
我可能需要重新调整我的数据框,以便每个组都是一行,但我不知道如何继续。
这是我想要的输出,函数输出两个值(power 和 meanN),每个值都应该有自己的列。
group power meanN
dogs .94 20.28
cats .95 27.36
【问题讨论】:
-
你能告诉我们你想要的输出吗?
-
您的函数正在返回包含两种方法的列表。
mean将接受向量答案,但始终返回标量结果。你真的想要两列的标量结果吗? -
是的,我希望输出中有两个单独的列。调整函数输出值的方式可能会更容易。
-
@Esther 我应该感谢随问题提供的代码/详细信息。它帮助我快速得到答案。