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$

我使用以下自定义函数在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$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