可能在函数中使用哪个错误,或者未在函数中指定变量

问题描述 投票:0回答:1

我尝试运行函数时收到错误,我认为这可能与以下事实有关:在函数开发后,我在函数中的单词周围加上了引号,或者在在代码块的底部,我运行了两行,给出了我想要的内容,但没有依赖函数。使用一个函数肯定会节省很多时间,因此在这里处理错误的任何建议将不胜感激。理想情况下,我的函数会给出多个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)
r dplyr which
1个回答
0
投票

我认为您需要使用as.formulareformulate从字符串中构建公式。然后,您可以直接将公式插入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
© www.soinside.com 2019 - 2024. All rights reserved.