afex与rempsyc包nice_table函数冲突问题求助
afex与rempsyc包nice_table函数冲突问题求助
你遇到的问题确实是因为两个包对nice_table类的S3方法冲突导致的:afex的nice()函数会创建一个nice_table类的数据框,同时注册了对应的print.nice_table方法,这个方法覆盖了rempsyc原本用于渲染表格的同名方法,而且卸载afex后被覆盖的方法不会自动恢复(因为S3方法注册是全局的)。
这里有几个可行的解决办法:
方法1:重新注册rempsyc的print方法
在加载afex之后,手动重新注册rempsyc的print.nice_table方法,这样后续调用nice_table时会用回正确的渲染逻辑:
library(rempsyc) library(afex) # 重新注册rempsyc的print方法 registerS3method("print", "nice_table", rempsyc::print.nice_table) # 现在再调用nice_table就正常了 nice_table( mtcars[1:3, ], title = c("Table 1", "Motor Trend Car Road Tests"), note = c( "The data was extracted from the 1974 Motor Trend US magazine.", "* p < .05, ** p < .01, *** p < .001" ) )
方法2:优先加载rempsyc并提前触发方法注册
如果先加载rempsyc并至少运行一次nice_table,再加载afex,有时候能让R优先保留rempsyc的方法(不过这个方法稳定性稍差,取决于包加载时的方法注册顺序):
# 先加载rempsyc并运行一次nice_table library(rempsyc) nice_table(mtcars[1:1, ]) # 再加载afex library(afex) # 此时nice_table应该还能正常工作 nice_table( mtcars[1:3, ], title = c("Table 1", "Motor Trend Car Road Tests"), note = c( "The data was extracted from the 1974 Motor Trend US magazine.", "* p < .05, ** p < .01, *** p < .001" ) )
方法3:手动指定打印方法
如果上面的方法都失效,你可以先调用nice_table生成对象,然后明确用rempsyc的打印方法来渲染:
library(afex) library(rempsyc) # 生成nice_table对象 my_table <- nice_table( mtcars[1:3, ], title = c("Table 1", "Motor Trend Car Road Tests"), note = c( "The data was extracted from the 1974 Motor Trend US magazine.", "* p < .05, ** p < .01, *** p < .001" ) ) # 用rempsyc的print方法强制渲染 rempsyc::print.nice_table(my_table)
这些方法都不需要重启R就能恢复nice_table的正常功能,你可以根据自己的脚本需求选择最合适的一种~
备注:内容来源于stack exchange,提问作者lisa_s
相关产品推荐
相关产品推荐

