Имам функция и списък с аргументи.
F <- function(a,b,...) {a^b+b/a}
L <- list("a" = 5, "b" = 2, "c" = 0)
Искам да заменя един от аргументите ("a", "b" или "c") с неизвестен x (или "x") и да начертая със stat_function на ggplot.
Тези изчисления са част от лъскаво приложение, където потребителят ще 1) избере параметър от падащ списък, да кажем „a“, за да бъде неизвестното, и 2) да използва плъзгачи, за да избере стойности на другите параметри. Числата 5, 2, 0 в L са стойностите на параметрите по подразбиране, които трябва да се използват преди взаимодействие с потребителя. Има няколко такива функции. Тук списъкът с параметри L има елемент, който не се използва във F.
Толкова дълго съм се занимавал с това, че вече не мога да мисля трезво. От многото неща, които опитах, ето едно:
# select a parameter to vary:
Y <- "a"
f1 <- function(f = F, l = L, y = Y, x, ...){
l[y] <- x # replace "a" with x
do.call(f, l, ...)
}
# make a stat_function ggplot:
library("ggplot2")
df <- data.frame(x = c(0,10))
p <- ggplot(df, aes(x))
p <- p + stat_function(fun = f1)
print(p)
Това връща следната грешка:
Error in (function (f = F, l = L, y = Y, x, ...) :
argument "x" is missing, with no default
Error in as.environment(where) : 'where' is missing
Опитах няколко варианта, включително: настройка на l[y] ‹- "x" и използване на aes_string вместо aes. Опитах и обратни кавички около x. Прочетох документацията за среди, така че се опитах да дефинирам среда, обвивам x и почти всичко около eval или quote. Дори съм пробвал вуду. Изгубих броя колко часа съм прекарал в това. Едно предложение да прочета ръководството или намек без обяснение ще ме убие. 8-) Ако въпросът ми е неясен, моля, уведомете ме и аз ще изясня. Благодаря!