如何从 R 中的长命令创建过程?

How can I create a procedure from a long command in R?

我有一个包含六行的命令,我想多次使用它。因此,我想为这个命令指定一个名称并将其用作过程,而不是一遍又一遍地编写整个命令行。

在这种情况下,它是一个 <-rbind() 命令,但问题也更普遍。

modelcoeff<-rbind(modelcoeff,c(as.character((summary(mymodel)$terms[[2]])[[3]]),
          as.character((((((summary(mymodel)$terms[[2]])[[2]])[[3]])[[3]])[[2]])[[3]]),
          summary(mymodel)$coefficients[2,1],
          summary(mymodel)$coefficients[2,4],
          summary(mymodel)$coefficients[2,2],
          summary(mymodel)$r.squared*100))

我想调用 rbindmodelcoeff 之类的东西并执行这些命令行。我怎样才能做到这一点? 我试着写了一个函数,但它似乎不是正确的方法。

将代码直接包装到函数中:

rbindmodelcoeff <- function(modelcoeff, mymodel) {
  rbind(modelcoeff,
        c(as.character((summary(mymodel)$terms[[2]])[[3]]),
          as.character((((((summary(mymodel)$terms[[2]])[[2]])[[3]])[[3]])[[2]])[[3]]),
          summary(mymodel)$coefficients[2,1],
          summary(mymodel)$coefficients[2,4],
          summary(mymodel)$coefficients[2,2],
          summary(mymodel)$r.squared*100))
}

但是,我建议进行一些更改:

  • 调用summary(mymodel)一次,然后re-use结果
  • 您正在 一些 对象上使用 as.character,但并非所有对象都在封闭的 c(.) 中,因此所有内容都被转换为 character;要明白我的意思,请尝试 c(as.character(1), 2);我们可以使用 list 来保留 string-vs-number
rbindmodelcoeff <- function(modelcoeff, mymodel) {
  summ <- summary(mymodel)
  rbind(modelcoeff,
        list(as.character((summ$terms[[2]])[[3]]),
             as.character((((((summ$terms[[2]])[[2]])[[3]])[[3]])[[2]])[[3]]),
             summ$coefficients[2,1],
             summ$coefficients[2,4],
             summ$coefficients[2,2],
             summ$r.squared*100))
}

但是这个还是有一些问题。我现在无法让它工作,因为我不知道你使用的模型参数,所以 as.character((summ$terms[[2]])[[3]]) 对我来说会失败。有了这个,我总是对 hard-code 这么多括号犹豫不决,而没有完全理解正在使用的是什么。它超出了这个问题的范围(正在将您的基本代码转换为函数),但您可能想了解如何概括该部分。