为什么我的自定义函数除了打印数据外还要打印我的行名?
Why is my custom function printing my row names in addition to the data?
我使用以下自定义函数在 R 中创建 table 汇总统计数据。
regression.stats<-function(fit){
formula<-fit$call;
data<-eval(getCall(fit)$data);
abserror<-abs(exp(fit$fitted.values)-data$bm)/exp(fit$fitted.values);
QMLE<-exp((sigma(fit)^2)/2);
smear<-sum(exp(fit$residuals))/nrow(data);
RE<-mean(data$bm)/mean(exp(fit$fitted.values));
CF<-(RE+smear+QMLE)/3;
adjPE<-mean(abs((exp(fit$fitted.values)*CF)-data$bm)
/(exp(fit$fitted.values)*CF));
SEE<-exp(sigma(fit)+4.6052)-100;
summary<-summary(fit)
statistics<-data.frame("df"=fit$df.residual,
"r2"=round(summary(fit)$r.squared,4),
"adjr2"=round(summary(fit)$adj.r.squared,4),
"AIC"=AIC(fit),"BIC"=BIC(fit),
"logLik"=logLik(fit),
"PE"=round(mean(abserror)*100,2),QMLE=round(QMLE,3),
smear=round(smear,3),RE=round(RE,3),CF=round(CF,3),
"adjPE"=round(mean(adjPE)*100,2),
"SEE"=round(SEE,2),row.names = print(substitute(fit)));
return(statistics)
}
我想将结果行绑定到 data.frame 中,以便生成 table 回归分析之间的比较统计数据。例如,使用来自 mtcars
数据集的数据...
data(mtcars)
lm1<-(cyl~mpg,data=mtcars)
lm2<-(cyl~disp,data=mtcars)
lm2<-(disp~mpg,data=mtcars)
rbind(regression.stats(lm1),regression.stats(lm2),regression.stats(lm3))
我正在为 R Markdown html 文件创建此文件,我希望读者能够分辨出哪个回归方程产生了哪些统计数据。但是,当我 运行 代码时,除了生成的 html 文档中的回归统计信息之外,它还会打印 lm
函数名称的列表。
我已经设法将问题追查到我函数中的 row.names = print(substitute(fit)))
行。如果我删除该行,它在 运行 函数时不再打印 lm
名称。但是,随后发生的是我的行不再与正确的型号名称相关联。 如何调整我的函数,使其只打印模型函数的名称作为汇总函数的行名称,而不是创建额外的列表?
行
...
row.names = print(substitute(fit))
...
应该是
row.names = deparse(substitute(fit))
或者简单地 substitute(fit)
因为它被转换为 character
因为 print
没有任何 return 值,它只是在控制台上打印
功能变更后
rbind(regression.stats(lm1),regression.stats(lm2),regression.stats(lm3))
# df r2 adjr2 AIC BIC logLik PE QMLE smear RE CF adjPE SEE
#lm1 30 0.7262 0.7171 91.46282 95.86003 -42.73141 NaN 1.570 1.443000e+00 NA NA NaN 1.585700e+02
#lm2 30 0.8137 0.8075 79.14552 83.54273 -36.57276 NaN 1.359 1.317000e+00 NA NA NaN 1.189600e+02
#lm3 30 0.7183 0.7090 363.71635 368.11356 -178.85818 NaN Inf 1.861805e+65 NA NA NaN 1.092273e+31
我使用以下自定义函数在 R 中创建 table 汇总统计数据。
regression.stats<-function(fit){
formula<-fit$call;
data<-eval(getCall(fit)$data);
abserror<-abs(exp(fit$fitted.values)-data$bm)/exp(fit$fitted.values);
QMLE<-exp((sigma(fit)^2)/2);
smear<-sum(exp(fit$residuals))/nrow(data);
RE<-mean(data$bm)/mean(exp(fit$fitted.values));
CF<-(RE+smear+QMLE)/3;
adjPE<-mean(abs((exp(fit$fitted.values)*CF)-data$bm)
/(exp(fit$fitted.values)*CF));
SEE<-exp(sigma(fit)+4.6052)-100;
summary<-summary(fit)
statistics<-data.frame("df"=fit$df.residual,
"r2"=round(summary(fit)$r.squared,4),
"adjr2"=round(summary(fit)$adj.r.squared,4),
"AIC"=AIC(fit),"BIC"=BIC(fit),
"logLik"=logLik(fit),
"PE"=round(mean(abserror)*100,2),QMLE=round(QMLE,3),
smear=round(smear,3),RE=round(RE,3),CF=round(CF,3),
"adjPE"=round(mean(adjPE)*100,2),
"SEE"=round(SEE,2),row.names = print(substitute(fit)));
return(statistics)
}
我想将结果行绑定到 data.frame 中,以便生成 table 回归分析之间的比较统计数据。例如,使用来自 mtcars
数据集的数据...
data(mtcars)
lm1<-(cyl~mpg,data=mtcars)
lm2<-(cyl~disp,data=mtcars)
lm2<-(disp~mpg,data=mtcars)
rbind(regression.stats(lm1),regression.stats(lm2),regression.stats(lm3))
我正在为 R Markdown html 文件创建此文件,我希望读者能够分辨出哪个回归方程产生了哪些统计数据。但是,当我 运行 代码时,除了生成的 html 文档中的回归统计信息之外,它还会打印 lm
函数名称的列表。
我已经设法将问题追查到我函数中的 row.names = print(substitute(fit)))
行。如果我删除该行,它在 运行 函数时不再打印 lm
名称。但是,随后发生的是我的行不再与正确的型号名称相关联。 如何调整我的函数,使其只打印模型函数的名称作为汇总函数的行名称,而不是创建额外的列表?
行
...
row.names = print(substitute(fit))
...
应该是
row.names = deparse(substitute(fit))
或者简单地 substitute(fit)
因为它被转换为 character
因为 print
没有任何 return 值,它只是在控制台上打印
功能变更后
rbind(regression.stats(lm1),regression.stats(lm2),regression.stats(lm3))
# df r2 adjr2 AIC BIC logLik PE QMLE smear RE CF adjPE SEE
#lm1 30 0.7262 0.7171 91.46282 95.86003 -42.73141 NaN 1.570 1.443000e+00 NA NA NaN 1.585700e+02
#lm2 30 0.8137 0.8075 79.14552 83.54273 -36.57276 NaN 1.359 1.317000e+00 NA NA NaN 1.189600e+02
#lm3 30 0.7183 0.7090 363.71635 368.11356 -178.85818 NaN Inf 1.861805e+65 NA NA NaN 1.092273e+31