首先一点上下文:
在我的包summarytools中,我print
为“summarytools”类的对象定义了一个方法。我还创建了一个函数,该函数view()
处理使用by()
或lapply()
以这样的方式创建的对象,即输出不包括说明组的行 - 或在 ; 的情况下的变量lapply()
。summarytools 显示包含该信息的自己的标题,因此在使用print
. 此外,使用view()
.
这是一个例子。请注意,在此版本(开发中)中,我包含了一条建议使用的消息view()
:
> library(summarytools)
> (tmp <- with(tobacco, by(smoker, gender, freq)))
gender: F
For best results printing list objects with summarytools, use view(x, method = 'pander')
Frequencies
tobacco$smoker
Type: Factor
Group: gender = M
Freq % Valid % Valid Cum. % Total % Total Cum.
----------- ------ --------- -------------- --------- --------------
Yes 147 30.06 30.06 30.06 30.06
No 342 69.94 100.00 69.94 100.00
<NA> 0 0.00 100.00
Total 489 100.00 100.00 100.00 100.00
------------------------------------------------------------------
gender: M
Frequencies
tobacco$smoker
Type: Factor
Group: gender = F
Freq % Valid % Valid Cum. % Total % Total Cum.
----------- ------ --------- -------------- --------- --------------
Yes 143 29.24 29.24 29.24 29.24
No 346 70.76 100.00 70.76 100.00
<NA> 0 0.00 100.00
Total 489 100.00 100.00 100.00 100.00
现在使用view()
:
> view(tmp, method = "pander")
Frequencies
tobacco$smoker
Type: Factor
Group: gender = M
Freq % Valid % Valid Cum. % Total % Total Cum.
----------- ------ --------- -------------- --------- --------------
Yes 147 30.06 30.06 30.06 30.06
No 342 69.94 100.00 69.94 100.00
<NA> 0 0.00 100.00
Total 489 100.00 100.00 100.00 100.00
Group: gender = F
Freq % Valid % Valid Cum. % Total % Total Cum.
----------- ------ --------- -------------- --------- --------------
Yes 143 29.24 29.24 29.24 29.24
No 346 70.76 100.00 70.76 100.00
<NA> 0 0.00 100.00
Total 489 100.00 100.00 100.00 100.00
我已经考虑过如何将“by”类的对象自动分派到view()
而不是print()
. 如果我将“summarytools”类添加到这些对象,该print()
方法可以将调用重定向到view()
,从而使用户更容易获得正确的最佳输出。
到目前为止,我想到的解决方案如下:
- 向函数添加“by”参数,以便我可以完全控制创建对象的比例。我不喜欢这个解决方案,因为 1)我尝试依赖人们熟悉的基本 R 函数,而不是引入新参数,2)当使用
lapply()
. - 重新定义
by()
,以便在从 summarytools 的函数之一调用它时,它将所需的类附加到创建的对象中。我避免了这种情况,因为我对重新定义基本函数犹豫不决。我宁愿看不到在加载包时对象已被屏蔽的消息。 - 定义一个特定的包
by()
,例如by_st()
;by.default()
我可以使用与and基本相同的代码by.data.frame()
,唯一的区别是我将“summarytools”类添加到创建的对象中。这是我正在考虑的一种妥协。
我的问题如下:是否还有其他我没有看到的更好的解决方案?