2015-05-27 2 views
0

Я пытаюсь генерировать средние значения по группам для каждой из многочисленных переменных (видов), а затем строить каждый из них отдельно. Я попробовал списки таблиц и таблиц данных. Функция базового участка работает в цикле:Создайте несколько графиков решетки из таблицы данных, используя lapply

library(data.table) 

     for (i in 3:5) { 
     # generate a list of mean value for the species in column number i 
     temp <- v2[, lapply(.SD, mean), by="Season", .SDcols=i] 
     # plot each col of the list as a scatterplot with main title = header of 2nd col 
     plot(temp[[2]]~temp[[1]], main = colnames(temp)[[2]]) 
    } 

Но когда я пытаюсь создать участки решетки генерируется для последней переменной только один участок:

library(data.table) 
library(lattice) 

for (i in 3:5) { 
    # generate a list of mean value by season for the species in column number i 
    temp <- v2[, lapply(.SD, mean), by=c("Season", "Location"), .SDcols=i] 
    # Each group in a separate mini plot 
    xyplot(temp[[3]]~temp[[1]] | temp[[2]], main = colnames(temp)[3]) 
} 

Пытались сохранение или печать каждой решетки сюжет, это правильная идея? Возможно, я все-таки об этом поменяю?

Вот небольшой пример моих данных:

structure(list(Location = structure(c(1L, 1L, 1L, 1L, 4L, 4L, 
4L, 6L, 6L, 1L), .Label = c("BN", "BS", "GN", "GS", "SB", "SL" 
), class = "factor"), Season = c(1981L, 1981L, 1981L, 1981L, 
1995L, 1995L, 1995L, 1997L, 1997L, 2000L), Agrostis.magellanica = c(0.3, 
0.3, 0.3, 0.01, 0.6, 0.3, 0.3, 0.3, 0.6, 0.05), Festuca.contracta = c(0.6, 
0.05, 0.3, 0.01, 0.01, 0, 0, 0, 0.01, 0.05), Poa.annua = c(0.01, 
0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.05, 0.01, 0.01)), .Names = c("Location", 
"Season", "Agrostis.magellanica", "Festuca.contracta", "Poa.annua" 
), class = c("data.table", "data.frame"), row.names = c(NA, -10L 
) 

ответ

2

Это в R-FAQ. Нужна print заявление вокруг сетки графика (решетки или ggplot), когда используется внутри функции, и цикл for является функцией:

# Needed 
require(data.table) # before defining the object. 

pdf() # pdf is a multipage device. 
for (i in 3:5) { 
    # generate a list of mean value by season for the species in column number i 
    temp <- v2[, lapply(.SD, mean), by=c("Season", "Location"), .SDcols=i] 
    # Each group in a separate mini plot 
    print(xyplot(temp[[3]]~temp[[1]] | temp[[2]], main = colnames(temp)[3])) 
} 
dev.off() # Failing to properly close a file graphics device is common error. 
+0

Спасибо! Обратите внимание, что вам нужно указать файл pdf, иначе он не будет записываться в него, например. 'pdf (" test.pdf ")' Должно быть указано в исходном сообщении, что я был после вывода eps, используя ваш код, я заменил 'pdf()' 'postscript (onefile = FALSE,« Species% 03d.eps »,) ', чтобы получить несколько файлов eps, экспортированных в рабочий каталог. – nicfit

+0

Наш опыт отличается. На моей машине есть имя по умолчанию «Rplots.pdf» для файлов pdf (описано в разделе «Использование» в формате pdf), поэтому мне не нужно указывать аргумент имени. Если ваша страница справки '? Pdf' отличается от другой, то обязательно обратитесь к ее советам. –

+0

Существует действительно имя по умолчанию «RPlots.pdf». Я упустил этот файл в рабочем каталоге. – nicfit