Как я могу использовать вставку внутри функции lapply? - PullRequest
1 голос
/ 18 июня 2019

Привет, так просто у меня есть список данных с именами.

Я хочу напечатать имена фрейма данных на графиках по оси X, используя lapply.

К сожалению, моя попытка оказалась бесполезной.

Похоже, что функции lapply не любят векторы, поэтому преобразование моего текущего продукта в удобочитаемый с помощью lapply крайне желательно.

set.seed(1:1000)
df <- as.data.frame(replicate(1, rnorm(20)))
df2 <- as.data.frame(replicate(1, rnorm(20))) 
df.list <- append(df,df2)
require(reshape2)
require(ggplot2)
melt.df.list <- lapply(df.list, function(x) melt(x))
names(melt.df.list) <- c("Plot1","Plot2")

lapply(melt.df.list, function(x) ggplot(x, aes(x=value)) + 
              geom_histogram(aes(y=..density..), colour="black",         fill="white")+
              geom_density(alpha=.2, fill="#FF6666") +
              labs(x = 
                     lapply(as.character(names(melt.df.list)), function(y)
                       paste("Counts","(",y,")", collapse ="+")),
                   y = "Density") +
              xlim(-5, 20))

1 Ответ

3 голосов
/ 18 июня 2019

Краткое изложение трех основных обсуждаемых вариантов:

# Loop over the names instead
lapply(names(melt.df.list), function(nm) ggplot(melt.df.list[[nm]], aes(x=value)) + 
         geom_histogram(aes(y=..density..), colour="black", fill="white")+
         geom_density(alpha=.2, fill="#FF6666") +
         labs(x = paste("Counts","(",nm,")"),
              y = "Density") +
         xlim(-5, 20))

# Use imap    
library(purrr)
imap(.x = melt.df.list,.f = ~ggplot(.x, aes(x=value)) + 
    geom_histogram(aes(y=..density..), colour="black", fill="white")+
    geom_density(alpha=.2, fill="#FF6666") +
    labs(x = paste("Counts","(",.y,")"),
         y = "Density") + xlim(-5, 20))

# Just write a darn for loop ;)    
for (i in seq_along(melt.df.list)){
  ggplot(melt.df.list[[i]], aes(x=value)) + 
    geom_histogram(aes(y=..density..), colour="black", fill="white")+
    geom_density(alpha=.2, fill="#FF6666") +
    labs(x = paste("Counts","(",names(melt.df.list)[i],")"),
         y = "Density") +
    xlim(-5, 20)
}
...