Search code examples
rfor-loopdata-extractionstoring-datardata

Incorrect number of dimensions: extracting elements from multiple rdata files


PROBLEM I have many .RData files in one folder and I want to extract the coordinates continued in each .rdata file. I'd also like to link the concomitant file name(use_hab) and datetime(dt) to each row of their respective coordinates.

CODE

file.namez<-list.files("C:/fitting/fitdata/7 27 2015") #name of files
#file.namez.rev<-file.namez[grep(".RData",file.namez)]

datastor<-data.frame(matrix(NA,length(file.namez),4))
names(datastor)<-c("use_hab",paste("B",1:3,sep=""))

allresults<-NULL

for(i in 1:length(file.namez))
  {
  datastor<-NULL
  print(file.namez[i])
  load(paste("C:/fitting/fitdata/7 27 2015/",file.namez[i], sep=""))
  use_hab <- as.character(as.data.frame(strsplit(file.namez[i],"_an"))[2,])# this line is used to remove unwanted parts of the file name
  use_hab <- gsub(".RData","", use_hab)
  datastor <- fitdata$coords
  datastor$use_hab <- use_hab
  datastor$dt <- fitdata$dt
  allresults <- rbind(allresults, datastor[,c(3,4,1,2)])
}

This is only result before the error message:

[1] "fitdata_anw514_yr2008.RData"

ERROR

Error in datastor[, c(3, 4, 1, 2)] : incorrect number of dimensions
In addition: Warning message:
In datastor$use_hab <- use_hab : Coercing LHS to a list

QUESTION How am I getting the incorrect number of dimensions? Each file name should have 1098 coordinates and date time. In total, 63 files x 1098 rows with 4 columns(filename, datetime, x, y).

The desired result is to have the file name as the first column, the date time as the second column, and the x and y coordinates as the third and fourth columns.


Solution

  • Replace

      datastor <- fitdata$coords
    

    with

     datastor$coords <- fitdata$coords
    

    The error message Coercing LHS to a list is thrown when you try to access something with $ that does not support this. datastor <- fitdata$coords changes datastor to the data type of fitdata$coords.

    Also, you'd change

    allresults<-NULL
    datastor<-NULL
    

    to

    allresults <- data.frame()
    datastor <- data.frame()
    

    but this may just my personal preference.