Основная проблема в том, что вы пытаетесь использовать нестандартную оценку, и это может быть сложно.Это проще, если вы просто помещаете имена столбцов в кавычки, хотя все еще немного сложно, потому что вам нужно создать формулу для отправки на lm()
.Например, этот код работал бы, если бы n
и o
были строками с именами столбцов вместо имен без кавычек:
fla <- substitute(n ~ 0 + o, list(n = as.name(n), o = as.name(o)))
fit <- lm(fla, data)
Вам также необходимо изменить вызов ggplot2
.Кажется, это работает, но я не знаю ggplot2
достаточно хорошо, чтобы знать, является ли это "правильным" способом сделать это:
ggplot(data, aes(x=data[[o]], y = data[[n]])) +
geom_point(aes(colour = data[[p]])) +
geom_abline(intercept=0, slope=fit$coefficients[1], color='#2C3E50', size=1.1) +
geom_text(aes(x = 1, y = 1, label = text)) +
labs(x = o, y = n, color = p)
С этими изменениями вы сможете позвонить fun
с указанными именами, например
fun("input", "columna", "columnb", "string")