【发布时间】:2020-10-01 10:09:06
【问题描述】:
我开始构建一个“用户友好”的 R6 类,并希望创建一个函数来完成我类的大部分工作。这是我目前的结构
x <- X$new()
veggie_cubes <- veggie %>% x$cubesX(ID)
veggie_slices <- veggie %>% x$sliceX(ID)
我现在的问题是是否可以重写代码:
x <- X$new()
veggie_cubes <- veggie %>% x$cutX(cubesX, ID)
veggie_slices <- veggie %>% x$cutX(sliceX, ID)
函数头应该看起来像:cut(.data, FUN, KEY)
到目前为止,我的想法是写cut 喜欢:
cutX= function(.data, FUN, KEY)
{
.data %>%
FUN({{ KEY }}) %>%
base::return()
}
唯一可行的方法是调用veggie %>% x$cutX(x$cubesX, ID),我不太喜欢作为“用户友好”的解决方案,我也不太喜欢为此使用字符串。没有x$有没有办法写?
这里是简化的 R6 类:
X <- R6::R6Class(
classname = "X",
public = base::list(
cubesX = function(.data, KEY)
{
.data %>%
dplyr::select(!{{ KEY }}) %>%
base::return()
},
sliceX = function(.data, KEY)
{
.data %>%
dplyr::select({{ KEY }}) %>%
base::return()
},
cutX = function(.data, FUN, KEY)
{
.data %>%
FUN( {{ KEY}}) %>%
base::return()
}
)
)
运行示例:
x <- X$new()
iris %>% x$sliceX(Species)
iris %>% x$cubesX(Species)
# with FUN
iris %>% x$cutX(x$sliceX, Species)
iris %>% x$cutX(x$cubesX, Species)
没有运行:
iris %>% x$cutX(sliceX, Species)
iris %>% x$cutX(cubesX, Species)
在此先感谢 :-)
【问题讨论】:
-
你能发布你的R6类定义的代码吗?