Ggplot внутри функции: когда он не распознает аргументы и когда это делает?

Рассмотрим следующие две функции:

library(ggplot2)

testdata <- as.data.frame(cbind(rep(c(1, 4), each = 50), rbinom(100, 50, .5)))
names(testdata) <- c("group", "value")

plotfun1 <- function(color) {
  ggplot(data = testdata, aes(x = factor(group, levels = c(0: 4)), y = value)) + 
    geom_boxplot(color = color) 
}

plotfun2 <- function(number) {
  ggplot(data = testdata, aes(x = factor(group, levels = c(0: number)), y = value)) + 
    geom_boxplot(color = 'red') 
}

Plotfun1 отлично работает, вызывая

plotfun1('red') 

дает два красивых красных ящика. Однако вызов

plotfun2(4)

выводит сообщение об ошибке:

Ошибка в коэффициенте (группа, уровни = c (0: число)): объект 'номер' не найден

очевидно, в некоторых случаях ggplot не может "найти" аргументы функции, а в некоторых случаях и есть. Что здесь происходит?

PS Я знаю, что есть легкая работа вокруг:

plotfun3 <- function(number) {
  plotdata <- testdata
  plotdata$group <- factor(plotdata$group, levels = c(0: number))
  ggplot(data = plotdata, aes(x = group, y = value)) + 
    geom_boxplot(color = 'red') 
}

Я просто хочу понять, что происходит.)

Ответ 1

Захват локальной среды и ее использование при построении графика:

plotfun2 <- function(number) {
localenv <- environment()
  ggplot(data = testdata, aes(x = factor(group, levels = c(0:number)), y = value), environment = localenv ) + 
    geom_boxplot(color = 'red') 
}

plotfun2(4)