我正在尝试使用 R 中引入的新 S7 OOP(https://github.com/RConsortium/S7)。我想使用 S7 来包装一元运算符的 S3 方法|
。
我有一个 class 对象"ggsurvfit"
,我想定义三个新方法:
`|`(ggsurvfit, ggsurvfit)
`|`(ggsurvfit, ggplot)
`|`(ggplot, ggsurvfit)
几周前,我很幸运能够与 Hadley Wickham(他是开发 S7 的 R Consortium 团队的成员)在同一个房间,他好心地向我提供了下面的代码,以使用 S7 包装 S3 方法。(我添加了返回的文本字符串仅供参考)
method(`|`, list(new_S3_class("ggsurvfit"), new_S3_class("ggsurvfit"))) <- function(e1, e2) {
"This is ggsurvfit|ggsurvfit"
}
method(`|`, list(new_S3_class("ggsurvfit"), new_S3_class("ggplot"))) <- function(e1, e2) {
"This is ggsurvfit|ggplot"
}
method(`|`, list(new_S3_class("ggplot"), new_S3_class("ggsurvfit"))) <- function(e1, e2) {
"This is ggplot|ggsurvfit"
}
我遇到的问题是我无法启动/触发这些方法。在下面的示例中,我希望/期望操作返回 string "This is ggsurvfit|ggplot"
。我在这里缺少什么?谢谢你!
library(ggsurvfit)
#> Loading required package: ggplot2
S7::method(`|`, list(S7::new_S3_class("ggsurvfit"), S7::new_S3_class("ggplot"))) <- function(e1, e2) {
"This is ggsurvfit|ggplot"
}
plot1 <-
survfit2(Surv(time, status) ~ sex, data = df_lung) |>
ggsurvfit() +
add_risktable()
class(plot1)
#> [1] "ggsurvfit" "gg" "ggplot"
plot2 <-
ggplot(mtcars, aes(mpg, cyl)) +
geom_point()
class(plot2)
#> [1] "gg" "ggplot"
ret <- plot1 | plot2
#> Error in plot1 | plot2: operations are possible only for numeric, logical or complex types
创建于 2023 年 10 月 10 日,使用reprex v2.0.2