Как генерировать графики того же типа, используя ранее написанные команды для нескольких сотен похожих наборов данных? - PullRequest
2 голосов
/ 11 июля 2011

У меня есть несколько сотен наборов данных, которые находятся в одном файле данных, мне нужно, прежде всего, взять подмножества каждого набора данных, и я написал команды для создания графика и файла CSV. Затем я хочу создать графики и CSV-файлы того же типа для остальных наборов данных. Интересно, есть ли в R команда, которую я мог бы использовать?

Чтобы быть более точным, я записал команды для определенного подмножества следующим образом, а затем мне нужно сделать то же самое для остальных подмножеств данных, единственное, что мне нужно изменить, - это изменить например, имена подмножеств меняют «семь» на «восемь», «седьмой» на «восьмерку» и т. д. Есть ли в R команда, которая бы сделала это для меня? (Так что мне не нужно повторяться, изменяя имена, копируя и вставляя одни и те же вещи в R.) Большое спасибо!

alldata <- read.csv(file="file.csv",header=T,sep=",")

seven<- subset(alldata, aserno==7, select=c(I,C,D))  # aserno==7, so I need to change 7 into different numbers included in the data file

sevenout <- subset(seven, I=="a" & D>0, select=c(I,C,D))

f <- function(sevenoutf) nrow(sevenoutf)

sevennumber <- ddply(sevenout,.(C), f)

colnames(sevennumber)[2] <- "N"

sevenout$N <- sevennumber$N [match(sevenout$C, sevennumber$C)]

sevenout=data.frame(sevenout,"time"=c(1:nrow(sevenout)))

plot(sevenout$time, sevenout$N, type="n")

lines(sevenout$time,sevenout$N)           # the result that I need

write.csv(sevenout, "sevenM.csv", row.names=FALSE)        # the result that I need

Ответы [ 2 ]

2 голосов
/ 11 июля 2011

Вы можете использовать цикл for для чего-то подобного: вы хотите четко видеть, что вы делаете, и выполнять все свои итерации за один шаг.Вы также можете прочитать список имен файлов, если они находятся в одном каталоге, а в этом каталоге больше ничего нет.Например:

setwd("/my_docs/my_project_data/") # where all your data files are

my.files <- list.files()

setwd("/my_docs/my_project_graphs/") # somewhere to save your graphs

for(i in 1:length(my.files))
   {
   temp.dat <- read.csv(my.files[i])
   YOUR FUNCTION

   pdf(paste(Sys.Date(),"_",my.files[i],"_graph.pdf", sep="")) # naming the pdf that will be written out
   plot(temp.dat$number, temp.dat$td, main=my.files[i])
   dev.off()
   write.csv(temp.dat, paste(Sys.Date(),"_",my.files[i],"_new_data.pdf", sep=""), row.names=FALSE)
   }

В зависимости от того, как / где вы хотите сохранить их, вы можете отправить их в разные каталоги в этой команде вставки, изменив начало, вставьте ("../ graphs /", Sys.... и вставьте ("/../ new_data /", Sys ....

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

0 голосов
/ 11 июля 2011

Попробуйте написать функцию-обертку, которая вызывает ваши подфункции внутри.Затем передайте функции имена переменных через список, используя одну из функций apply () (tapply, sapply и т. Д.) В соответствии с вашими потребностями

MyWrapperFunction <- function( infile) {

                      a <- read.csv(file = infile)
                      a1 <- subset(a, inout==2, select=c(A,C,D))
                      f.sum <- function(a1f) sum(a1f$D)
                      atd <- ddply(a1, .(a1$C), f.sum)
                      colnames(atd)[2] <- "td"

                      f.nrow <- function(a1f) nrow(a1f)
                      aC <- ddply(a1,.(a1$C), f.nrow)
                      colnames(aC)[2] <- "number"

                      a_A <- merge(atd, aC, by="a1$C")
                      myplot <- plot(a_A$number, a_A$td)  # the result I need
                      # save as your desired image file, png, pdf, etc...
                      # e.g. pdf( myplot, file = paste( infile, "_plot.pdf, sep = "") )

                      # the result I need
                     write.csv(a_A, 
                              file = paste( infile, "_output.csv, sep = ""),
                              row.names=FALSE) }

И заимствуя некоторый код из nzcoops:

setwd("/my_docs/my_project_data/") # where all your data files are

my.files <- list.files()

setwd("/my_docs/my_project_graphs/") # somewhere to save your graphs

apply( my.files, MyWrapperFunction)

Вот способ начать работу с универсальной функцией для вашей проблемы поднабора

anotherWrapperFunction <- function( data, subset.critera,...) 

где ... другие вещи, которые вы хотите передать функции

data.subset <- subset( data, aserno == subset.critera, #etc...)

data.subset.subset <- subset( data.subset, #etc...) 

Кстати, я не уверен, почему вы делаете это в два поднабора шагов, вы можете сделать это все в одном вызове через &

f <- function(sevenoutf) nrow(sevenoutf) 

Также вам не нужно это какфункция f <- nrow(sevenoutf) выполняет то же самое

data.subset.subset.ddply <- ddply( data.subset.subset, #etc...)

colnames(data.subset.subset.ddply)[2] <- "N"

и т. д.,

теперь выписываете графики и CSV-файл, как и раньше

# save as your desired image file, png, pdf, etc...
# using the subset criteria in the file name so you can ID the plot
# e.g. pdf( myplot, file = paste( "subset", subset.critera, "_plot.pdf, sep = "") )

и выполняетето же самое с write.csv, как я показал вам выше

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...