Конечно, вы можете построить фабрики функций для аргументов fun.ymin
и fun.ymax
, которые дают значение только в том случае, если длина ввода превышает некоторое число. Единственным недостатком является то, что он должен возвращать какое-то значение, поэтому вы получите предупреждение об этом.
library(ggplot2)
nmax <- function(n) {
n <- force(n)
function(x) {
if (length(x) >= n) {
max(x)
} else {
NA_real_
}
}
}
nmin <- function(n) {
n <- force(n)
function(x) {
if (length(x) >= n) {
min(x)
} else {
NA_real_
}
}
}
d <- qplot(cyl, mpg, data=mtcars)
d + stat_summary(fun.ymin = nmin(8), fun.ymax = nmax(8), geom = "errorbar")
#> Warning: Removed 1 rows containing missing values (geom_errorbar).
Создано 2020-05- 06 с помощью пакета correx (v0.3.0)
Если вы обнаружите, что указание N два раза слишком громоздко / подвержено ошибкам, вы также можете создать обычные функции, которые принимают n как аргумент и передать fun.args
:
nmax2 <- function(x, n) {
if (length(x) >= n) {
max(x)
} else {
NA_real_
}
}
nmin2 <- function(x, n) {
if (length(x) >= n) {
min(x)
} else {
NA_real_
}
}
d <- qplot(cyl, mpg, data=mtcars)
d + stat_summary(fun.ymin = nmin2, fun.ymax = nmax2, fun.args = list(n = 8), geom = "errorbar")