我正try 在我的R代码中使用两个包AFEX(Easy ANOVAS)和REMEPECC(Easy APA表格格式化).独立运行时,两者都能很好地工作.我使用repacc的函数"NICE_TABLE"创建了一个APA格式的表,该表可以导出到Word,但也可以在RStudio查看器中看到,如下所示:

nice_table function screenshot from RStudio Viewer

但是,一旦我加载了AFEX,来自remepec的这个函数就不再向我显示表格,而是给我以下错误消息:

[1] header body footer col_keys caption blanks properties 
<0 rows> (or 0-length row.names) 

为了重现这个问题,这里有一个基于mtcars的基本示例,它也用于演示rempsyc.

library(rempsyc)

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"
  )
)
#this one works


library(afex)

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"
  )
)
#this one gives the error above and no table is created


detach("package:afex", unload = TRUE)

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"
  )
)

#still doesn´t work

正如您所看到的,我的第一个解决方案是卸载AFEX以使其再次工作,但相同的错误仍然存在.指定程序包(REMEPECC::NICE_TABLE)也不起作用.让函数"NICE_TABLE"再次工作的唯一方法是完全关闭R/RStudio并从头重新启动.

我认为问题出在AFEX的"NICE"函数中,该函数输出"NICE_TABLE"类的数据帧(如手册所述).这似乎以某种方式覆盖了允许函数"NICE_TABLE"工作的某些默认方法.

我基本上只是在问,是否有人知道这两个包仍然可以在一个脚本中一起工作的方法.也许我错过了什么.提前谢谢您!

推荐答案

我是rempsyc包的维护员.感谢您报告此问题.我已经打开了一个issue within the afex repository来为这个相互冲突的命名空间找到解决方案.这个问题有望在future 的afex版本中得到解决.

与此同时,我在下面提供了这个问题的解释,以及使用pkgload::unload而不是detach的解决方案,您可以暂时在脚本中使用它.

解决方法

data <- mtcars[1:3, ]
table <- flextable::flextable(data)
class(table) <- c("nice_table", class(table))

suppressPackageStartupMessages(library(afex))

print(table)
#> [1] header     body       footer     col_keys   caption    blanks     properties
#> <0 rows> (or 0-length row.names)

pkgload::unload("afex")

table

创建于2024-02-22,共reprex v2.0.2


解释

afex包有一个打印方法,用于类nice_table的对象(用于afex::nice()函数),当然,rempsyc::nice_table()也产生类nice_table的对象.

具体的问题是,afex:::print.nice_table()nice_table对象上使用print.data.frame(x),但随后不返回flextable,或者更确切地说,以不可见的方式返回invisible(x)(如这code lines所示).

Ithink在我这边我无能为力(除了放弃nice_table类),因为afex在没有太多健壮性判断的情况下覆盖了这个类的打印方法,以避免这种类型的冲突.希望我们很快就能找到解决方案.

pkgload::unload的变通方法是可行的,因为与detach不同,它分离了整个名称空间.如果需要,您可以稍后在脚本中再次加载afex,并根据需要重复这些步骤.

R相关问答推荐

如何根据包含相同值的某些列获取总额

从R中的另一个包扩展S3类的正确方法是什么

基于不同组的列的相关性

如何在xyplot中 for each 面板打印R^2

获取列中值更改的行号

如何在ggplot图中找到第二轴的比例

使用整齐的计算(curl -curl )和杂音

R Read.table函数无法对制表符分隔的数据正常工作

解析R函数中的变量时出现的问题

基于R中的间隔扩展数据集行

为什么在BASE R中绘制线条时会看到线上的点?

KM估计的差异:SvyKm与带权重的调查

从多层嵌套列表构建Tibble?

我如何使用tidyselect来传递一个符号数组,比如Pivot_Long?

如何将这个小列表转换为数据帧?

从线的交点创建面

构建一个6/49彩票模拟系统

有毒元素与表观遗传年龄的回归模型

在使用SliderInput In Shiny(R)设置输入数据的子集时,保留一些情节痕迹

在shiny /bslb中,当卡片是从json生成时,如何水平排列卡片?