为什么我的自定义函数除了打印数据外还要打印我的行名?

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