如何避免 class 名称与包 "loaded via a namespace (and not attached)" 冲突(qdap 和 openssl)

How to avoid class name conflict with a package "loaded via a namespace (and not attached)" (qdap & openssl)

使用qdap::polarity()函数有时会运行进入错误:

Error in derive_pubkey(key) : RAW() can only be applied to a 'raw', not a 'list'

我相当确定这是由于 qdapkey class 与 openssl 包的 key class 冲突(因为错误消息中引用了 openssl 中的 derive_pubkey()

错误发生在openssl出现在sessionInfo()loaded via a namespace (and not attached):部分时,它似乎抛出了键class的方法调度并导致错误.

我只能通过重新启动 R 会话来修复错误。有没有办法从会话中删除 openssl 的足迹以解决此问题?或者有没有另一种方法可以在不重新启动 R 的情况下避免这个问题?

重现错误

> successful      <- qdap::polarity("testing")
> load_openssl_ns <- body(openssl:::print.key)
> fails           <- qdap::polarity("testing")
Error in derive_pubkey(key) : 
  RAW() can only be applied to a 'raw', not a 'list'

对于脏修复 运行

`[[.qdap_hash` <- `[[.data.frame`

正在检查...

> qdap::polarity("test")
  all total.sentences total.words ave.polarity sd.polarity stan.mean.polarity
1 all               1           1            0          NA                 NA
> library(openssl)
Warning message:
package ‘openssl’ was built under R version 3.3.3 
> qdap::polarity("test")
Error in derive_pubkey(key) : 
  RAW() can only be applied to a 'raw', not a 'list'
> `[[.qdap_hash` <- `[[.data.frame`
> qdap::polarity("test")
  all total.sentences total.words ave.polarity sd.polarity stan.mean.polarity
1 all               1           1            0          NA                 NA
> 

polarity 中的违规行是 words <- c(posneg, alter[[1]])

对象 alter 是用 alter_env 创建的,它创建的对象具有 类 "qdap_hash"、"key"、...

qdap_hash 没有它自己的“[[”方法,所以它会检查键是否有一个通常没有的“[[”方法。加载 openssl 后,有一个 [[ key 方法,因此它使用它并给出错误,因为它不是预期的形式。如果我们为 qdap_hash 定义我们自己的方法,甚至在尝试使用 [[.key 之前就被调用,那么我们就绕过了这个问题。 qdap 的作者已被告知该问题和可能的修复。