将函数应用于目录

时间:2016-10-17 17:53:11

标签: r loops matrix directory lapply

我有一个函数,它接受三个矩阵数据文件(LAT,LON,DATA)并将它们组合成一个带有三列的csv文件。但是,这是我在2010-2015的每日数据系列中的一天,因此我需要将其应用于数据文件目录。 LAT和LON文件不会变化,只是按日期的DATA文件。我的问题很简单:如何将此功能应用于我的目录,以便它为我提供一个新的CSV文件,其中包含新csv文件名称中的日期。思考?我做了几件事,没有运气。这是我的代码:

    ####PR PRAG WATER DATA XYZ###
setwd("/Users/andrewbudsock/Dropbox/Research/ActualET_PR")
LON<-read.csv("LONGITUDE.csv")
LAT<-read.csv("LATITUDE.csv")
ET<-read.csv("actual_ET20100101.csv")
###STACKOVERFLOW TRY######
myList<-list(LON=LON, LAT=LAT, ET = ET)
  lapply(myList, function(x){
    as.matrix(x) %>%
      as.numeric()
  }) %>%
  as.data.frame()
Flat<-na.omit(flattened)
write.csv("flat.csv", Flat)

DataName<-seq(as.Date("2010-01-01"), as.Date("2015-12-31"), by = 'day')
as.list(DataName)
write.csv(Flat, "xyz.csv");

#loop all files in 
files <- list.files(path="/Users/andrewbudsock/Dropbox/Research/ActualET_PR", pattern="*.csv", full.names=T, recursive=FALSE)
lapply(files, function(x) {
  t <- read.table(x, header=T) # load file
  # apply function
  out <- function(t){
    for(i in length(t)){
      myList= list(LAT=LAT, LON=LON, ET=t[i])
      lapply(myList, function(x){
        as.matrix(x) %>%
          as.numeric()
      }) %>%
        as.data.frame()
      Flat<-na.omit(flattened)
    }
  }
    # write to files
    write.table(out, "/Users/andrewbudsock/Dropbox/Research/ActualET_PR/R", paste(DataName, ".csv", sep = ""), sep="\t", quote=F, row.names=F, col.names=T)
})

1 个答案:

答案 0 :(得分:0)

文件需要单独写吗?换句话说,拥有一个包含所有数据的文件会更好(甚至更好吗?)吗?如果是这样,并且假设上面的文件名是准确的,你可以用这个来获得商店的所有文件名(注意,我首先明确地抓住lat / lon,所以它们是第一列)。使用HashMap<Dimension,ArrayList<Integer>> map = new HashMap<Dimension,ArrayList<Integer>>(); //code to sort:

dplyr

然后,您可以使用以下内容将所有值读入列表:

myfiles <-
  c(
    # LAT/LONG files
    list.files(pattern = "*TUDE.csv")
    # Data files
    , list.files(pattern = "^actual_ET")
    ) %>%
  # Set names by removing csv or the leading portion
  setNames(gsub("\\.csv|actual_ET", "", .))

然后,只需将整个列表转到上一个问题的myList <- lapply(myfiles, read.csv) 来电:

lapply

你将获得一个包含所有内容的data.frame。

相反,如果您确实需要为每个日期分别创建一个文件,那么您应该能够读入上面的数据,然后使用下面的代码。这将跳过out <- lapply(myList, function(x){ as.matrix(x) %>% as.numeric() }) %>% as.data.frame() (您的纬度/经度)的前两个条目,并使用上面设置的名称为输出文件命名,为每个日期生成一个新文件。我也将结果文件保存到变量myList中,尽管这不是绝对必要的。

sepOuts