Я получаю сообщение об ошибке, когда пытаюсь запустить свою функцию, и я думаю, что это может быть связано либо с тем фактом, что я включаю кавычки вокруг слов в функцию после ее разработки, либо с тем, что я выполняю подмножество таким способом, который не подходит для R. В нижней части кода я запускаю две строки, которые дают мне то, что я хочу, но не полагаясь на функцию. Использование функции определенно сэкономит много времени, поэтому любые предложения по обработке ошибок здесь будут очень полезны. Моя функция в идеале даст результаты нескольких t-тестов.
Пример кода ниже
# 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)
РЕДАКТИРОВАТЬ: Я действительно понял, что (а) более гибкая версия myfunction
будет иметь cutdataset
сможет принимать treatvar
вместо treatment
, последний из которых на самом деле является переменной в наборе данных, когда я думаю, что было бы идеально указать через treatvar
. Так что я добавил это в cutdataset
, но я не думаю, что это работает хорошо. У меня также (б) возникли проблемы с включением другого l oop, который, как я думал, не будет проблематичным c (и поэтому я не включал его ранее, просто хочу сосредоточиться на t-тестах), но оказался вопрос, и снова я думаю, что это связано со строками и тому подобное. Т.е. я просто получаю столбец нулей для столбца n1. Буду признателен за любую помощь, и любые советы о том, почему это происходит, действительно помогут мне избежать этого в будущем. Я включил информацию, предоставленную Беном.
# 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){
n1 <- c(
nrow(dataset[dataset$day == 25 & dataset$treatvar == treat1,]),
nrow(dataset[dataset$day == 50 & dataset$treatvar == treat1,]),
nrow(dataset[dataset$day == 75 & dataset$treatvar == treat1,]),
nrow(dataset[dataset$day == 100 & dataset$treatvar == treat1,])
)
cutdataset <- with(dataset, dataset[ (treatvar==treat1 | treatvar==treat2), ])
frmla <- reformulate(termlabels = treatvar, response = outcome)
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(cbind(n1, 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)
nrow(example[example$day == 25 & example$treatment == "vaccine1",])