Использование lapply или l oop для создания нескольких фигур из списка списков матриц. - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть список списков матриц. Все списки имеют одинаковое количество матриц, все матрицы имеют одинаковое количество столбцов, и все матрицы в списке имеют одинаковое количество строк, однако количество строк в матрицах разных списков различается. Я попытался воссоздать небольшой пример набора данных ниже

set.seed(100)
biglist <- list(
  a=list(foo=matrix(sample(1:10,30,replace=TRUE),ncol=3 ),
         bar=matrix(sample(1:10,30,replace=TRUE),ncol=3),
         puppy=matrix(sample(1:10,30,replace=TRUE),ncol=3)
  ),
  b=list(foo=matrix(sample(1:10,24,replace=TRUE),ncol=3),
         bar=matrix(sample(1:10,24,replace=TRUE),ncol=3),
         puppy=matrix(sample(1:10,24,replace=TRUE),ncol=3)
  )
)

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

Вот код, который я написал для одного коробочного графика

yoptions=c('foo','bar','puppy')
mynames=c('first','second','third')
titleoptions=c('a','b')


plotdata=biglist$a$foo
colnames(plotdata)=mynames

afoo=ggplot(melt(as.data.table(plotdata)),aes(x=variable,y=value))+
  geom_boxplot()+ggtitle(paste(mynames[1],titleoptions[1],sep=" "))+
  ylab(paste(yoptions[1]))

Это дает мне то, что я хочу для матрицы foo в списке a. Я хочу теперь иметь возможность применять это к каждой матрице в списке, изменяя plotdata, заголовки и метки, чтобы соответствовать соответствующей матрице в списке, а затем сохранять ее в переменную, которая объединяет список и матрицу. Это привело бы к следующим переменным, все с другим графиком, прикрепленным к этой переменной: afoo abar apuppy bfoo bbar bpuppy

Я знаю, что это не очень r-like, но первая идея, которая у меня была, была своего рода вложенной for-l oop, хотя я не уверен, как это будет работать в этом случае. Я знаю, что lapply используется для списков, и я кое-что изучил во вложенных lapplys (lapplies?), Но я не уверен, как получить это, чтобы сделать несколько переменных, которые соответствуют моим цифрам, которые я хочу получить.

Любой совет ценится! Спасибо!

1 Ответ

1 голос
/ 15 апреля 2020

как-то так (две вложенные петли):

for(i in 1:length(biglist)) {

  sublist <- biglist[[i]]

  for(j in 1:length(sublist)) {

    plotdata <- sublist[[j]]
    name     <- paste(english::ordinal(j),letters[i],sep="_")

    assign(name, ggplot(melt(as.data.table(plotdata)),
      aes(x=variable,y=value))+
      geom_boxplot()+ggtitle(name)+
      ylab(names(sublist)[j]))

  }

}
...