评估(公式)在 R 中的箱线图内不起作用

eval(formula) not working inside boxplot in R

我正在尝试创建一个函数,该函数将使用一个数值变量与一个指定的其他变量制作箱线图。像这样:

plot_box <- function(x){
 formula <- paste("logerror~",x, sep="")
 boxplot(eval(formula), data = data)
}

但这会导致以下错误:Error in x[floor(d)] + x[ceiling(d)] : non-numeric argument to binary operator

为什么 eval 在 boxplot 中不起作用,而在其他函数(例如 lm())中起作用?

可重现的例子:

set.seed(1)
data <- data.frame(y = rnorm(30), x = sample(seq(1,5), 30, replace =T))
formula <- "y~x"
boxplot(eval(formula), data = data)

Error in x[floor(d)] + x[ceiling(d)] : non-numeric argument to binary operator

boxplot(y~x, data = data)
lm(eval(formula), data = data)

这是您的问题的解决方案:

set.seed(1)
dts <- data.frame(y = rnorm(30), x = sample(seq(1,5), 30, replace =T))

plot_box <- function(x, data) {
 formula <- paste("y~",x, sep="")
 boxplot(eval(parse(text=formula)), data = data)
}
plot_box("x", dts)

formula <- "y~x"
boxplot(eval(parse(text=formula)), data = dts)