Я хочу извлечь имя фрейма данных в функции карты. Поэтому я создал 3 примера фреймов данных:
name_df1<-data.frame()
name_df2<-data.frame()
name_df3<-data.frame()
С помощью этого кода я получаю то, что хочу:
deparse(substitute(name_df1))
[1] "name_df1"
И теперь я пытаюсь поместить этот код в функцию карты, чтобы извлечь имя всех трех фреймов данных:
Но сначала я создаю список всех фреймов данных, которые необходимы для запуска функции карты:
list_dfs<-ls()
[1] "list_dfs" "name_df1" "name_df2" "name_df3"
А вот моя карта-функция:
map(mget(list_dfs), function(x)
deparse(substitute(x)))
But I get this:
$name_df1
[1] ".x[[i]]"
$name_df2
[1] ".x[[i]]"
$name_df3
[1] ".x[[i]]"
Может ли кто-нибудь помочь мне решить эту проблему?
Я хочу создать ggplot для каждого кадра данных. И я хочу добавить заголовок с + labs(title =name_df1)





Я думаю, что здесь было бы проще использовать map2, передав имя и фрейм данных отдельно
library(tidyverse)
list_dfs<-ls(pattern = "name_df")
map2(mget(list_dfs), list_dfs, ~ggplot(.x) + .... + labs(title = .y))
Спасибо за такой подход. Это работает в моем случае.
Но есть ли у кого-нибудь другой подход к решению вышеуказанной проблемы?
Мы можем увидеть, как imap сделать это на mget возвращенных list объектах, поскольку list будет именованным списком, а imap может извлечь .y как names
library(purrr)
library(dplyr)
library(ggplot2)
imap(mget(list_dfs), ~ ggplot(.x) +
... +
labs(title = .y))
Каково более широкое применение этого? В текущем сценарии вы получаете то, что хотите делать
ls(pattern = "name_df")