2016-09-12 8 views
1

Я создаю список графиков из списка фреймов данных и пытаюсь добавить заголовок для каждого графика, соответствующего имени фрейма данных в списке. Вне lapply, если я вызываю paste0(names(df.list)[x]), он возвращает имя интересующего фрейма данных.Извлечь перечисленные имена фреймов данных внутри lapply

Когда я пытаюсь добавить это в lapply

df.plots<-lapply(df.list, function(x) p<-ggplot(x,aes(x=Numbers,y=Signal)) + geom_point() + ggtitle(paste0(names(df.list)[x])) )

я получаю следующее сообщение об ошибке:

Error in names(df.list)[x] : invalid subscript type 'list'

Есть еще один способ, которым я могу извлечь данные кадры имена, так что я могу добавить их к сюжетам?

+0

Если все элементы списка названы, я думаю, что добавить 'ggtitle (names (x))' должно быть достаточно. – thepule

+1

Связано с [this] (http://stackoverflow.com/questions/9950144/access-lapply-index-names-inside-fun) в терминах элементов списка и имени списка. – aosmith

ответ

1

вы можете использовать map2 из purrr в цикле по списку и имена в списке одновременно, создавая сюжет каждый раз. В map2.x относится к первому списку, а .y относится ко второму списку, который вы можете использовать в своем графическом коде.

library(purrr) 
map2(dlist, names(dlist), 
    ~ggplot(.x, aes(Numbers, Signal)) + 
     geom_point() + 
     ggtitle(.y)) 
1

Это не удается, потому что значение x является элементом списка df.list, который не является тем, что вы можете использовать для индексации вектора имен.

Вы можете попробовать lapply на индексации вектора вместо, что объясняется в вопросе aosmith связан (Access lapply index names inside FUN)

lapply(seq_along(df.list), function(i) { 
    ggplot(df_list[[i]], aes(x=Numbers, y=Signal)) + 
     geom_point() + 
     ggtitle(names(df.list)[i]) 
} 

(Кроме того, не ваше непосредственное отношение к вашему вопросу, но называть paste0 не делает ничего, если вы передадите это только одно значение, так что вы можете упасть, что)