我正在尝试创建一个用Yeo-Johnson变换对y轴进行变换的箱线图。在我的代码下面尝试此操作,但它返回一个错误,该错误在代码下面。我使用此LINK编写了代码。为方便起见,我在虹膜数据集中使用了一个示例。请让我知道您对如何进行这项工作的想法。
library(scales)
library(VGAM)
trans.yeo <- function(x) {
yeo.johnson(x, inverse = FALSE, lambda = -1.000968)
}
back.yeo <- function(x) {
yeo.johnson(x, inverse = TRUE, lambda = -1.000968)
}
scale.yeo <- function() {
require(scales)
trans_new("yeo", transform = trans.yeo, inverse = back.yeo)
}
iris.bxp <- ggplot(iris, aes(x=Species, y=Sepal.Length, fill=Species)) +
geom_boxplot()+
scale_y_continuous(trans = scale.yeo())
iris.bxp
(具有指定lambda的特定转换对Sepal.Length变量可能没有意义,但对我自己的数据却有意义。这只是给出我所产生代码的可用示例)
ans [index]中的错误<-(y [index] * lambda [index] + 1)^(1 / lambda [index])-: 下标作业中不允许使用NA
如果我先定义:
trans_yeo <- trans_new("yeo", transform = trans.yeo, inverse = back.yeo)
然后将scale_y_continuous(trans = scale.yeo())
替换为coord_trans(y=trans_yeo)
,它似乎确实起作用...