przetwarzanie potokowe bez pętli

0

Funkcja ma pobierać 3 argumenty:
directory - nazwa folderu z danymi
pollutant - nazwa kolumny jaka bierzemy do wyliczenia
id - nr pliku

i ma wyliczac srednią dla wartości wskazanej kolumny ze wskazanego pliku w skazanym folderze. Gdy uzytkownik wskaże 1 plik działa coś takiego:

pollutantmean <- function (directory, pollutant,id){
  if(!pollutant %in% c("nitrate","sulfate")) {
    cat("błędny pollutant")
    break}
  mean(as.numeric(na.omit(read.table(paste(directory,"/",list.files(directory)[id],sep=""),sep=",", header=TRUE)[,ifelse(pollutant=="nitrate",3,2)]))))
} 

ale jak zrobić by działało gdy użytkownik wskaże > 1 plików? Można by pętlą doklejać wartości kolumn z plików , ale to zbyt skomplikowane. Jak użyć do tego przetwarzania potokowego? w stylu lapply() ?

0

Naukowiec od R z coursera.com mówi, że:

"usin aply() is somehow better than usin a for loop or somehow it's faster than usin for loop."
And dat generally speakin is not true.
The main reason ya wanna to use a function like apply() is dat involves less typin.
Less typin is alwasy better , cuz good programmers are alwasy lazy.
:D

2

Najbardziej lubię rozmawiać sam ze sobą. Oszczędzam w ten sposób czas i unikam kłótni.

-- Oscar Wilde

0

OK, nie chcieliście mi pomóc to zrobiłem z pętlą for:

#set the directory when ya got the folder
setwd("C:/R/")

pollutantmean <- function (directory, pollutant,id){
  if(!pollutant %in% c("nitrate","sulfate")) {
    cat("błędny pollutant")
    break}
  asum<-0
  bsum<-0
  for (i in id) {
  a<-sum(as.numeric(na.omit(read.table(paste(directory,"/",list.files(directory)[i],sep=""),sep=",", header=TRUE)[,ifelse(pollutant=="nitrate",3,2)])))
 aa<-as.numeric(a)
 asum<-asum+aa
  b<-length(as.numeric(na.omit(read.table(paste(directory,"/",list.files(directory)[i],sep=""),sep=",", header=TRUE)[,ifelse(pollutant=="nitrate",3,2)])))
  bb<-as.numeric(b)
 bsum<-bsum+bb
  }
 return (asum/bsum)
} 

1 użytkowników online, w tym zalogowanych: 0, gości: 1