Может быть, есть лучший подход, и я спрашиваю "проблему XY".
Я хочу контролировать количество дрожания на моем графике рассеяния, чтобы быть процентом от общей ширины переменной в это измерение. Я написал функцию scale_jitter (), которая вычисляет сумму в этом измерении на основе предоставленной части p. Это прекрасно работает, пока я явно сбрасываю переменную df $ в моей функции scale_jitter (). Однако мне нравится кодировать вещи способом tidyverse / dplyr, и поэтому, хотя следующий код работает, он рассчитывает диапазон на основе того, что назначено для df $ a и df $ b в текущей области видимости, а не вычисляет диапазон на основе Функция dplyr :: filter (), которая стоит перед ней.
scale_jitter <- function(x,p=0.02) {
return((max(x)-min(x))*p)
}
df <- tibble(a=rep(rnorm(n=5,mean=50,sd=25),20),
b=rep(rnorm(n=5,mean=50,sd=25),20))
df %>%
filter(a < 50) %>%
ggplot(aes(x=a,y=b)) +
geom_jitter(
width=scale_jitter(df$a),
height=scale_jitter(df$b)
)
Я бы хотел, чтобы что-то вроде следующего работало, но я получаю ошибки об отсутствии объектов для a и b. Я пробовал. $ A и. $ B, но это тоже не сработало.
df %>%
filter(a < 50) %>%
ggplot(aes(x=a,y=b)) +
geom_jitter(
width=scale_jitter(a),
height=scale_jitter(b)
)
В конечном итоге я установил порцию / процент для параметров высоты и ширины geom_jitter вместо значения у которого есть единицы.