如何从 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 这么多括号犹豫不决,而没有完全理解正在使用的是什么。它超出了这个问题的范围(正在将您的基本代码转换为函数),但您可能想了解如何概括该部分。
我有一个包含六行的命令,我想多次使用它。因此,我想为这个命令指定一个名称并将其用作过程,而不是一遍又一遍地编写整个命令行。
在这种情况下,它是一个 <-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 这么多括号犹豫不决,而没有完全理解正在使用的是什么。它超出了这个问题的范围(正在将您的基本代码转换为函数),但您可能想了解如何概括该部分。