afex 和 rempsyc 包中的冲突类/函数“nice_table”

问题描述 投票:0回答:1

我正在尝试在我的 R 代码中使用两个包 afex(简单的 anovas)和 rempsyc(简单的 APA 表格格式)。独立地,两者都工作得很好。我使用 rempsyc 的函数“nice_table”以 APA 格式创建一个表,该表可以导出到 Word,但也可以在 RStudio 查看器中看到,如下所示:

一旦我加载 afex,rempsyc 的这个函数就不再向我显示表格,而是给我以下错误消息:

[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 以使其再次工作,但仍然存在相同的错误。指定包 (rempsyc::nice_table) 也不起作用。我可以让函数“nice_table”再次工作的唯一方法是完全关闭 R/RStudio 并从顶部重新启动。

我认为问题出在 afex 的“nice”函数内,该函数输出“nice_table”类的数据帧(如手册所述)。这似乎以某种方式覆盖了一些允许函数“nice_table”工作的默认方法。

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

r package
1个回答
1
投票

编辑:在

rempsyc
的开发版本中,我现在已经完全删除了
nice_table
类,因此您应该能够从 r-Universe 安装新版本,而无需在脚本中使用
pkgload::unload
。新版本最终将进入 CRAN。

install.packages("rempsyc", repos = c(
  rempsyc = "https://rempsyc.r-universe.dev",
  CRAN = "https://cloud.r-project.org"))

旧答案

我是

rempsyc
包维护者。感谢您报告此问题。我在 afex
 存储库
中打开了一个
问题,以找到此冲突命名空间的解决方案。希望在未来版本的
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()
print.data.frame(x)
对象上使用
nice_table
,但随后不返回
flextable
,或者更确切地说,用
invisible(x)
不可见地返回它(如这些 代码行 所示) ).

认为我这边无能为力(除了放弃

nice_table
类),因为
afex
覆盖了这个类的打印方法,没有太多的稳健性检查来避免这种类型的冲突。希望我们能尽快找到解决方案。

pkgload::unload
的解决方法之所以有效,是因为与
detach
不同,它分离了整个命名空间。如果需要,您可以稍后在脚本中再次加载
afex
,并根据需要重复这些步骤。

© www.soinside.com 2019 - 2024. All rights reserved.