我尝试运行函数时收到错误,我认为这可能与以下事实有关:在函数开发后,我在函数中的单词周围加上了引号,或者在在代码块的底部,我运行了两行,给出了我想要的内容,但没有依赖函数。使用一个函数肯定会节省很多时间,因此在这里处理错误的任何建议将不胜感激。理想情况下,我的函数会给出多个t检验的结果。
下面的示例代码
library(dplyr)
# Develop dataframe
example <- data.frame(
c(rep(25, 25), rep(50,25), rep(75,25), rep(100,25)),
c(rep(c("vaccine1", "vaccine2", "vaccine3", "vaccine4"), 25)),
c(rep(rnorm(5), 20))
)
colnames(example) <- c("day", "treatment", "allout")
# Generate function
myfunction <- function(dataset, outcome, treatvar, treat1, treat2){
cutdataset <- with(dataset, dataset[ (treatment==treat1 | treatment==treat2), ])
ttests <- c(
round(as.numeric(t.test(outcome~treatvar, data = cutdataset[which(cutdataset$day==25),], var.equal = TRUE)[1]),3),
round(as.numeric(t.test(outcome~treatvar, data = cutdataset[which(cutdataset$day==50),], var.equal = TRUE)[1]),3),
round(as.numeric(t.test(outcome~treatvar, data = cutdataset[which(cutdataset$day==75),], var.equal = TRUE)[1]),3),
round(as.numeric(t.test(outcome~treatvar, data = cutdataset[which(cutdataset$day==99),], var.equal = TRUE)[1]),3),
round(as.numeric(t.test(outcome~treatvar, data = cutdataset[which(cutdataset$day==100),], var.equal = TRUE)[1]),3),
round(as.numeric(t.test(outcome~treatvar, data = cutdataset[which(cutdataset$day==125),], var.equal = TRUE)[1]),3),
round(as.numeric(t.test(outcome~treatvar, data = cutdataset[which(cutdataset$day==150),], var.equal = TRUE)[1]),3)
)
print(ttests)
}
# Run function
myfunction("example", "allout", "treatment", "vaccine1", "vaccine3")
# Isolated cases
cutdataset <- with(example, example[ (treatment=="vaccine1" | treatment=="vaccine3"), ])
round(as.numeric(t.test(allout~treatment, data = cutdataset[which(cutdataset$day==25),], var.equal = TRUE)[1]),3)
我认为您需要使用as.formula
或reformulate
从字符串中构建公式。然后,您可以直接将公式插入t.test
。
此外,您可以使用sapply
或其他方法代替对t.test
重复非常相似的语句。
# Generate function
myfunction <- function(dataset, outcome, treatvar, treat1, treat2){
cutdataset <- with(dataset, dataset[ (treatment==treat1 | treatment==treat2), ])
frmla <- reformulate(termlabels = treatvar, response = outcome)
# ttests <- c(
# round(as.numeric(t.test(frmla, data = cutdataset[which(cutdataset$day==25),], var.equal = TRUE)[1]),3),
# round(as.numeric(t.test(frmla, data = cutdataset[which(cutdataset$day==50),], var.equal = TRUE)[1]),3),
# round(as.numeric(t.test(frmla, data = cutdataset[which(cutdataset$day==75),], var.equal = TRUE)[1]),3),
# round(as.numeric(t.test(frmla, data = cutdataset[which(cutdataset$day==100),], var.equal = TRUE)[1]),3)
# )
ttests <- sapply(c(25,50,75,100), function(x)
round(as.numeric(t.test(frmla, data = cutdataset[which(cutdataset$day==x),], var.equal = TRUE)[1]),3))
print(ttests)
}
# Run function
myfunction(example, "allout", "treatment", "vaccine1", "vaccine3")
输出
[1] -0.065 0.366 0.065 -0.366