我正在尝试在数据框上运行power.t.test
并尝试为每位员工返回samplesize(n),但它给了我这个错误。
power.t.test出错(delta = d.f $ Delta,sd = d.f $ sd,sig.level = 0.05,: 'n','delta','sd','power'和'sig.level'中的一个必须为NULL
这是我到目前为止所做的。
dput(d.f)
structure(list(power = c(0.95, 0.95, 0.95, 0.95), sig.level = c(0.05,
0.05, 0.05, 0.05), sd = c(4.93255160738102, 20.3907509926899,
23.1325373816684, 6.0463892968789), delta = c(97, 97, 90, 96),
workedby = structure(1:4, .Label = c("emp1", "emp2", "emp3",
"emp4"), class = "factor"), newcolumn = c(0, 0, 0, 0)), .Names = c("power",
"sig.level", "sd", "delta", "workedby", "newcolumn"), row.names = c(NA,
-4L), class = "data.frame")
第一种方法
d.f$newcolumn <- 0
for (i in 1:nrow(d.f)) {
n <- power.t.test(delta = d.f$delta, sd = d.f$sd, sig.level=.05, power = .8, type = "one.sample")
d.f$newcolumn[i] <- n
}
head(d.f)
第二种方法:
apply(d.f[,c('power','sig.level','sd','delta')], 1, function(x) power.t.test(x) )
有人可以告诉我我做错了什么。基本上,我希望为每位员工返回SampleSize。
答案 0 :(得分:1)
它需要一个值作为输入,而不是数据帧。以下作品:
power.t.test(delta=d.f$delta[1], sig.level=d.f$sig.level[1], power=d.f$power[1], sd=d.f$sd[1])
您需要将其包装在循环中并重新分配到“新列”中的正确行。