在包中正确引用 ddply
Properly reference ddply in a package
我创建了一个大量使用 dplyr
的包,与此同时,这个包需要包含一个依赖 ddply
来自 plyr
包的不同功能。本来我是直接用@import plyr
的,结果命名冲突,把我的其他功能都打坏了。
所以我想我唯一的解决办法是包括必要的功能。因此,我添加了 @importFrom plyr ddply ldply llply
,因为 ldply llply
用于 ddply
。然而,它失败了...
一些代码示例
描述:我在 Imports
下包含 dplyr
和 plyr
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
仍然适用于 ldply
、dlply
、llply
,但如果您只需要 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 =
位。
我创建了一个大量使用 dplyr
的包,与此同时,这个包需要包含一个依赖 ddply
来自 plyr
包的不同功能。本来我是直接用@import plyr
的,结果命名冲突,把我的其他功能都打坏了。
所以我想我唯一的解决办法是包括必要的功能。因此,我添加了 @importFrom plyr ddply ldply llply
,因为 ldply llply
用于 ddply
。然而,它失败了...
一些代码示例
描述:我在Imports
下包含 dplyr
和 plyr
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
仍然适用于 ldply
、dlply
、llply
,但如果您只需要 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 =
位。