R 为什么自定义函数除了打印数据外还打印行名?
我使用以下自定义函数在R中创建汇总统计表R 为什么自定义函数除了打印数据外还打印行名?,r,function,dataframe,formatting,r-markdown,R,Function,Dataframe,Formatting,R Markdown,我使用以下自定义函数在R中创建汇总统计表 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$
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)
}
我为一个R标记html文件创建了这个文件,我希望读者能够知道哪个回归方程产生了哪个统计数据。但是,当我运行代码时,除了结果html文档中的回归统计信息外,它还打印了lm
函数的名称列表
我已成功地跟踪到函数中的row.names=print(substitute(fit))
行。如果删除该行,则在运行函数时不再打印lm
名称。但是,接下来发生的情况是,我的行不再与正确的模型名称相关联如何调整我的函数,使其只将模型函数的名称打印为摘要函数的行名称,而不创建其他列表?行
...
row.names = print(substitute(fit))
...
应该是
row.names = deparse(substitute(fit))
或者简单地substitute(fit)
将其转换为character
因为print
没有任何返回值,它只是在控制台上打印
功能改变后
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
您在
行中有一个print
。name=print(substitute(fit))
为什么要打印?为什么不直接使用row.names=substitute(fit)
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