Одним простым подходом может быть передача данных в функцию графика plot_fun
в виде списка (с использованием одиночных скобок [
), а не в качестве элемента списка (с использованием двойных скобок [[
).Таким образом, имя элемента списка будет напрямую доступно внутри функции графика:
## dummy list of datasets
data_ls <- list(`Dataset 1` = data.frame(x = 1:10, y = 1:10), `Dataset 2` = data.frame(x = 1:10, y = 2 * (1:10)))
## dummy plot function
plot_fun <- function(data_el, ...) {
plot(data_el[[1]], ...) +
title(names(data_el))
}
plot_fun(data_ls["Dataset 1"], type = "l")
plot_fun(data_ls[2], type = "l")
Редактировать: для вызова plot_fun
для каждого элемента списка в data_ls
, мы могли бы изменить plot_fun
для принятия аргумента data
и name
, а затем вызвать lapply
, Map
, mapply
или purrr
walk2
или map2
(walk2
предпочтительнее, поскольку для его побочных эффектов требуется plot_fun
).
## modified dummy plot function
plot_fun <- function(data, name, ...) {
plot(data, ...) +
title(name)
}
## using lapply
lapply(seq_along(data_ls), function(i) plot_fun(data_ls[[i]], names(data_ls)[i], type = "l"))
## or with Map
Map(plot_fun, data = data_ls, name = names(data_ls), type = "l")
## or with purrr
purrr::walk2(.x = data_ls, .y = names(data_ls), .f = plot_fun, type = "l")