如何避免类名与“通过命名空间加载(而不是附加)”的包冲突(qdap& openssl)

时间:2017-07-19 17:21:34

标签: r qdap

使用qdap::polarity()函数有时会遇到错误:

  

derive_pubkey(key)出错:     RAW()只能应用于'raw'而不是'list'

我很确定这是由于qdap的{​​{1}}课与key包的openssl课程相冲突(key来自derive_pubkey()在错误消息msg中引用。

openssl出现在openssl的{​​{1}}部分时出现错误,并且它似乎会丢弃密钥类的方法调度并导致错误。

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

重新出现错误

sessionInfo()

1 个答案:

答案 0 :(得分:5)

进行脏修复运行

`[[.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,创建一个具有类&#34; qdap_hash&#34;,&#34; key&#34;,...

的对象

qdap_hash没有自己的[[&#39;方法,以便检查密钥是否有&#39; [[&#39;通常没有的方法。一旦openssl被加载,就有一个[[key的方法,所以它使用它并给出错误,因为它不是预期的形式。如果我们为qdap_hash定义了自己的方法,甚至在尝试使用[[.key之前就会调用它,所以我们绕过了这个问题。 qdap的作者已被告知该问题和可能的解决方案。