Чтобы избежать вызова print()
для вывода графического вывода, созданного ggplot2::qplot
, я использовал ответ @cbeleites на этот вопрос SO: qplot ggplot не выполняется на источники. Однако попытка запуска script генерирует следующую ошибку:
Error in exists(name, envir = env, mode = mode) : argument "env" is missing, with no default
Здесь вывод трассировки:
11 exists(name, envir = env, mode = mode)
10 find_global(scale_name, env, mode = "function")
9 scales_add_missing(plot, c("x", "y"))
8 ggplot_build(x)
7 print.ggplot(p)
6 print(p) at graphics.R#15
5 qplot(data[["Project Age"]], data = data, geom = "histogram", binwidth = 1) at edaSourceForge.R#8
4 eval(expr, envir, enclos)
3 eval(ei, envir)
2 withVisible(eval(ei, envir))
1 source("~/diss-floss/analysis/edaSourceForge.R")
Наконец, дополнительная заметка о том, как я запускаю script. Я считаю, что это важно, поскольку я считаю, что ошибка связана с отсутствием видимости конкретной среды R. Я запускаю script analysis/edaSourceForge.R
в RStudio, с текущим рабочим каталогом import
:
source('~/diss-floss/analysis/edaSourceForge.R')
Это не похоже на проблему IMHO, как относительные пути к пользовательскому qplot()
из рабочего каталога и из совпадения вызывающего модуля ( "../utils/graphics.R" ), но, конечно, я, возможно, ошибаюсь.
Структура моего проекта (~ is ruser
home directory):
+- ~/diss-floss (Project root)
|- ...
|- import (current working directory)
|- analysis (edaSourceForge.R)
|- utils (graphics.R)
|- ...
Функция переопределения для ggplot::qplot
находится в модуле graphics.R
:
qplot <- function (x, y = NULL, z = NULL, ...) {
p <- ggplot2::qplot (x = x, y = y, z = z, ...)
print (p)
}
Фактический вызов пользовательской функции qplot
находится в модуле edaSourceForge.R
if (!suppressMessages(require(ggplot2))) install.packages('ggplot2')
source("../utils/graphics.R")
Поскольку, как я уже сказал, я думал, что ошибка связана с неспособностью найти конкретную среду R, я пытался использовать различные связанные с окружающей средой функции R, но пока это не помогло.
Ваша помощь и советы будут очень оценены, как всегда!