Я хотел бы автоматизировать создание нескольких сотен точечных диаграмм, но у меня нет большого успеха с компактным способом обработки подмножества. Фрейм данных имеет три области интереса:
site code value
1 x 30
1 y 14
1 z 12
2 x 35
2 y 19
и т.д,
где сайт = числовое значение, значение = числовое значение, код = переменная группировки.
Там около 400 сайтов и 300 кодов.
Что я хочу:
- подмножество df на основе поля = код
- график x = сайт против y = значение, как точечный график
- запишите каждую диаграмму рассеяния на отдельную страницу в формате .pdf
- автоматизировать процесс
Любые комментарии приветствуются. Этот подход, например, генерирует ошибку, которую «подмножество» должно оценивать как логическое. Лаппли-звонок тоже может не работать.
dfarray<-list(subset(df,df[,2]))
pdf(file="test.pdf")
figures<-lapply(dfarray, function(i) {(plot(i$[,1],i$[,3]))
})
dev.off()
Спасибо большое
Включение d_ply сработало отлично. Я доволен этим результатом, но может ли кто-нибудь указать, что не так с оператором метки для осей X, Y? (Примечание: этот блок кода приводит к 1 PDF-файлу на подмножество)
names(df)<-tolower(names(df))
names(df)
d_ply(df,"code",function(x){
pdf(file=paste(unique(x$code),".pdf"))
plot(data=x,value~site, xlab=names(x[1]),ylab=as.name(x$code))
dev.off()
})
Обновление: ниже приведены две функционирующие версии этого кода, при условии, что фрейм данных df существует. Этот записывает диаграмму рассеяния каждой группы в отдельный .pdf:
names(df)<-tolower(names(df)
names(df)
d_ply(df,"code",function(x){
pdf(file=paste(unique(x$code),".pdf"))
plot(data=x, value~site, xlab=names(df[1]),ylab=unique(x$code))
dev.off()
})
Этот записывает все диаграммы рассеяния, по одной на группу, в один файл .pdf:
names(df)<-tolower(names(df)
names(df)
pdf(file="df_all.pdf")
d_ply( df, "code", function(x) {
plot(data=x, value~site, xlab=names(df[1]), ylab=unique(x$code))
})
dev.off()
paste(unique(x$code),".pdf")
приводит к именам файлов с пробелами, т. е.x .pdf
,y .pdf
и т. д. Используйте либоpaste0
, либоpaste( ..., sep ="")
. 2.)x
— этоdata.frame
, поэтомуx$code
— это вектор, поэтому, возможно, вы захотите вызватьylab=unique(x$code)
. - person Beasterfield   schedule 30.05.2013