在包中正确引用 ddply

Properly reference ddply in a package

我创建了一个大量使用 dplyr 的包,与此同时,这个包需要包含一个依赖 ddply 来自 plyr 包的不同功能。本来我是直接用@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 "."

那么有什么正确的建议吗?

.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 中将其与其他函数一起导入即可。

plyr 仍然适用于 ldplydlplyllply,但如果您只需要 ddply,只需使用 [= 重写它18=]:

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 将对上述任一情况发出 "variable without visible binding" 警告。如果您想提交给 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 = 位。