我正在制作一张表来比较使用r和latex的不同线性模型,通过包texreg(这是我第一次使用这个包)。我发现这个包非常有用,但我真的不明白为什么RMSE不包含在extract.lm方法中。
我已经通过这种方式修改了extract.lm方法,将其作为选项包含在内:
extract.lm<- function (model, include.rsquared = TRUE, include.adjrs = TRUE, include.rmse = TRUE,
include.nobs = TRUE, ...)
{
s <- summary(model, ...)
names <- rownames(s$coef)
co <- s$coef[, 1]
se <- s$coef[, 2]
pval <- s$coef[, 4]
rs <- s$r.squared
adj <- s$adj.r.squared
sig<-s$sigma ##added it
n <- nobs(model)
gof <- numeric()
gof.names <- character()
gof.decimal <- logical()
if (include.rsquared == TRUE) {
gof <- c(gof, rs)
gof.names <- c(gof.names, "R$^2$")
gof.decimal <- c(gof.decimal, TRUE)
}
if (include.adjrs == TRUE) {
gof <- c(gof, adj)
gof.names <- c(gof.names, "Adj. R$^2$")
gof.decimal <- c(gof.decimal, TRUE)
}
if (include.rmse == TRUE) { ##added it
gof <- c(gof, sig)
gof.names <- c(gof.names, "RMSE")
gof.decimal <- c(gof.decimal, TRUE)
}
if (include.nobs == TRUE) {
gof <- c(gof, n)
gof.names <- c(gof.names, "Num. obs.")
gof.decimal <- c(gof.decimal, FALSE)
}
tr <- createTexreg(coef.names = names, coef = co, se = se,
pvalues = pval, gof.names = gof.names, gof = gof, gof.decimal = gof.decimal)
return(tr)
}
然后我在控制台中运行它并搜索以使用
明确覆盖它setMethod("extract", signature=className("lm","stats"), definition=extract.lm, where="package:texreg")
这也是作者在rforge上建议的方式,但我有这个错误
Error in setMethod ...
the environment "texreg" is locked; cannot assign methods for function
我也尝试过使用fixInNamespace(),但是如果在终端中插入名称或者使用body()函数可以访问函数的源代码,则不会显示正文函数(这是方法)我访问并修改了它)。
我的错误在哪里?我该怎么做?
注意: 提取物是S4泛型。
请, 我想在包环境中明确地覆盖函数。
谢谢!
答案 0 :(得分:2)
该错误是由您尝试覆盖程序包环境中的对象引起的。我建议在您的本地环境中创建该方法,当您将texreg
与extract.lm
方法结合使用时,R将优先考虑该方法:
setMethod("extract", signature = className("lm", "stats"),
definition = extract.lm)
请参阅“统计软件期刊”中文章的第6部分:http://www.jstatsoft.org/v55/i08/