【问题标题】:Properly reference ddply in a package在包中正确引用 ddply
【发布时间】:2016-09-09 18:42:25
【问题描述】:

我创建了一个大量使用dplyr 的包,同时,这个包需要包含一个不同的功能,它依赖于ddplyplyr 包。本来我是直接用@import plyr,结果命名冲突,破坏了我的其他功能。

所以我想我唯一的解决方案是包含必要的功能。因此我添加了@importFrom plyr ddply ldply llply,因为ldply llply 用于ddply。但是,它失败了……

一些代码示例

描述:我在Imports下包括dplyrplyr
Package: My ProdComp
Type: Package
Imports:
    dplyr, plyr
命名空间(由 ROXYGEN2 生成)
import(dplyr)
importFrom(plyr,ddply)
importFrom(plyr,ldply)
importFrom(plyr,llply)
其实脚本
#' @importFrom plyr ddply ldply llply
#' 
#' @import dplyr
#'
#' @export

final_table <- ddply(product_type_subset,.(general_category, product_type, cas), summarise, Value = toString(maximum_weight_fraction[!is.na(maximum_weight_fraction)]))
错误信息
Error in as.quoted(.variables) : could not find function "."

那么对于如何使它正确有什么建议吗?

【问题讨论】:

    标签: r dplyr plyr


    【解决方案1】:

    .plyr,而不是dplyr

    > dplyr::.
    Error: '.' is not an exported object from 'namespace:dplyr'
    > plyr::.
    function (..., .env = parent.frame()) 
    {
        structure(as.list(match.call()[-1]), env = .env, class = "quoted")
    }
    <environment: namespace:plyr>
    

    所以只需从plyr 导入它以及其他函数。

    【讨论】:

      【解决方案2】:

      plyr 仍然适用于 ldplydlplyllply,但如果您只需要 ddply,只需使用 dplyr 重写即可:

      final_table <- ddply(product_type_subset,.(general_category, product_type, cas),
          summarise,
          Value = toString(maximum_weight_fraction[!is.na(maximum_weight_fraction)]))
      

      相当于:

      final_table <- group_by(product_type_subset, general_category, product_type, cas) %>%
          summarize_(Value = toString(maximum_weight_fraction[!is.na(maximum_weight_fraction)]))
      

      这将是更快的代码并减少不必要的依赖(从维护的角度来看这非常好!)。

      鉴于这是在一个包中,R CMD CHECK 将针对上述任一情况给出“没有可见绑定的变量” 警告。如果您想提交给 CRAN,则需要使用标准评估版本,如下所示:

      final_table <- group_by_(product_type_subset, ~general_category, ~product_type, ~cas) %>%
          summarize_(Value = ~toString(maximum_weight_fraction[!is.na(maximum_weight_fraction)]))
      

      我不知道一种简单的方法可以使plyr 版本进行标准评估。 .variables 参数可以使用字符向量代替 .(),但我不知道 Value = 位。

      【讨论】:

        猜你喜欢
        • 2014-01-29
        • 2017-12-16
        • 1970-01-01
        • 2014-12-01
        • 2021-07-28
        • 1970-01-01
        • 1970-01-01
        • 2014-03-01
        • 1970-01-01
        相关资源
        最近更新 更多