Могу ли я сохранить значения суммирования в функции * for *? - PullRequest
0 голосов
/ 14 ноября 2018

В настоящее время у меня есть много файлов Excel с одинаковыми полями, но для разных секторов.Я пытаюсь создать функцию, которая позволяет мне получить общее среднее значение из поля «сульфат» во всех моих листах Excel.

Это код, который у меня сейчас есть:

Mean_Pollution<-function(directory,pollutant,id = 1:332){
  directory <- c("001","002","003","004")
  for (x in directory){
    print(paste("Reading",x,"file"))
    temp = read.csv(paste(directory.path,x,".csv",sep = ""))
    print(paste("Finished reading",x,"file"))
    i = print(mean(temp$sulfate,na.rm = TRUE))
  }
}

1 Ответ

0 голосов
/ 14 ноября 2018

У вас, кажется, есть все, что вам нужно, и таких вопросов много, но я приведу пример.Здесь предполагается, что все в одной папке.Я буду использовать свою собственную папку:

setwd(dir = "C:/Users/Evan Friedland/Documents")
# Put some fake data in a fake folder
dir.create("Test_Folder")
setwd(dir = "C:/Users/Evan Friedland/Documents/Test_Folder")
n <- 5 # let's write 5 csv files
for(i in 1:n){
  write.csv(data.frame(madeupX = LETTERS[sample(1:24, 100, T)], sulfate = rnorm(100)), # fake data
            paste0(sprintf("%03d", i), ".csv")) # fake names
}
csvnames <- paste0(sprintf("%03d", 1:n), ".csv")

Теперь все, что вам нужно сделать, чтобы «сложить» среднее значение каждого файла, - это инициализировать пустой вектор, выполнить цикл по ним и сохранить каждый результат в элементвектор.

means <- numeric(n) # intialize numeric type vector, n long
names(means) <- csvnames # name each element for fun
means <- sapply(1:n, function(x){ # used sapply instead of a for loop but either is fine
  cat("+ ",csvnames[x],"\n") # print which csv is running
  mean(read.csv(paste0(csvnames[x]))$sulfate) # return the mean of the sulfate col
  })
#+  001.csv 
#+  002.csv 
#+  003.csv 
#+  004.csv 
#+  005.csv 
means # print results
#[1]  0.007859499  0.077447995  0.048796633 -0.101449790 0.224429258
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...