2015-02-19 1 views
2

Этот цикл создает список из 3 ggplots, но поскольку аргументы для x и xend зависят от индекса цикла, испуг следующим образом:Создание списка ggplots в цикле с использованием индекса цикла в качестве аргумента функции geom

DF <- data.frame(column1=c(1,2,3,4,5), column2=c(4,5,6,7,8)) 

list_of_ggplots <- list() 

for (num in seq(1:3)){ 
    p <- ggplot() 
    p <- p + geom_segment(data=DF, aes(x=column1[num], xend=column2[num], y=1, yend=1)) 

    list_of_ggplots[[num]] <- p } 
list_of_ggplots 

Мы получаем 3 участка будучи принципиально тот же сюжет (так как в тот момент времени, они называются, num является 3).

Что может быть лучшей стратегией для создания этих участков?

+0

ли вы хотите сделать это без цикла? –

+0

Структура цикла может быть изменена/изменена/удалена, если она в основном делает то же самое ... динамически создает переменное количество графиков, где указатель для доступа к данным в фрейме данных задается на основе итерации по seq (1: п). Или что-то эквивалентное seq (1: n). –

+0

это может помочь [link] (http://stackoverflow.com/questions/11357139/r-saving-ggplot2-plots-in-a-list) –

ответ

0

Вы можете получить список без выполнения явных циклов с помощью lapply:

list_of_ggplots <- lapply(1:nrow(DF), function(i) {ggplot(DF[i,]) + aes(x=column1, xend=column2, y=1, yend=1)+geom_segment()}) 
0

вы можете сделать список в более «R» -like образом с lapply, а затем просто подмножество DF с num против пытается делайте это в эстетике. Тем не менее, вы должны также использовать scale_x_continuous и установить limits, в противном случае они будут все еще «смотреть» те же (за исключением # 's на оси х)

list_of_ggplots <- lapply(1:nrow(DF), function(num) { 
    p <- ggplot() 
    p <- p + geom_segment(data=DF[num,], aes(x=column1, xend=column2, y=1, yend=1)) 
    p + scale_x_continuous(limits=c(0, max(DF$column2))) 
}) 
Смежные вопросы