评估(公式)在 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)
我正在尝试创建一个函数,该函数将使用一个数值变量与一个指定的其他变量制作箱线图。像这样:
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)