TLDR: когда вы поднастраиваете свой список base_plot, вам нужно использовать оператор [[
вместо $
Во второй версии функция воспринимает ее как "y" строку, а не переменная y
. Так как, по-видимому, нет никакого метро-кода "y", возвращается NULL
. Двоичный оператор - +
, а NULL
не является числом c. Вот упрощенный пример того, что происходит:
base_data <- list(
a = letters,
b = LETTERS,
c = rnorm(100)
)
getMyData <- function(y){
base_data$`x`
}
getMyData("a")
#> NULL
base_data$x <- "QSBjbHVlIHBlcmhhcHM="
val <- getMyData("a") %>% print()
#> [1] "QSBjbHVlIHBlcmhhcHM="
base64enc::base64decode(val) %>% rawToChar()
#> [1] "A clue perhaps"
Если вы измените свою функцию на использование оператора [[
, вы можете использовать строковое значение в переменной y
для подмножества:
actuallyGetMyData <- function(x){
base_data[[x]]
}
actuallyGetMyData("a")[1:10]
#> [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
РЕДАКТИРОВАТЬ : Относительно сопоставления перестановок (потому что трудно читать код в комментариях)
вызов map(expl, ~plot_fun)
создает анонимную функцию, которая возвращает функцию plot_fun
, Вам нужно либо удалить анонимную функцию
map(met, ~map(expl, plot_fun, y=.x))
, либо вызвать функцию
map(met, ~map(expl, ~plot_fun(.x, .y), .y=.x))
Я считаю, что вложенные карты немного трудно читать (.x становится .y, а что нет) так что в качестве альтернативы вы можете сначала перечислить все комбинации, а затем отобразить их
plotVars <- expand.grid(expl, met)
plot_final <- map2(plotVars[[1]], plotsVars[[2]], plot_fun) %>%
set_names(paste(plotVars[[1]], plotVars[[2]], sep = "_"))
Обратите внимание, что ваш список plot_final
больше не будет вложенным.