so my question might be very basic. I appreciate any help though:
I am trying to parse a nested list into a data frame using loops. To do this, I first created an empty data frame, with column names and all columns as characters:
dat<-data.frame(a=character(0), b=character(0), c=character(0), d=character(0), e=character(0), f=character(0),stringsAsFactors=FALSE)
Right now str(dat) would return something like this:
'data.frame': 0 obs. of 6 variables:
$ a: chr
$ b : chr
$ c: chr
$ d: chr
$ e: chr
$ f: chr
Then using for loops, I was able to extract list of variables from the nested list. There are several nested loops dealing with several nested data frames, so here is the simplified version:
for(i in 1:3){
a<-"sdfsaf"
b<-"dfadasfsd"
c<-"fdsfsadf"
d<-"dfads"
e<-"sfdsfdsf"
f<-"dfsfsdf"
dat<-rbind(dat,setNames(as.list(c(a,b,c,d,e,f)),names(dat)))
}
After the first loop (i==1), the returned dat will look like this:
a b c d e f
2 sdfsaf dfadasfsd fdsfsadf dfads sfdsfdsf dfsfsdf
Everything looks good. However, after all three loops completed, what I got is like this:
a b c d e f
2 sdfsaf dfadasfsd fdsfsadf dfads sfdsfdsf dfsfsdf
3 <NA> <NA> <NA> <NA> <NA> <NA>
4 <NA> <NA> <NA> <NA> <NA> <NA>
Now I checked str(dat). The columns in the data frame changed into factors! It shows something like this: 'data.frame': 3 obs. of 6 variables:
$ a: Factor w/ 1 level "sdfsaf": 1 NA NA
$ b : Factor w/ 1 level "dfadasfsd": 1 NA NA
$ c: Factor w/ 1 level "fdsfsadf": 1 NA NA
$ d: Factor w/ 1 level "dfads": 1 NA NA
$ e: Factor w/ 1 level "sfdsfdsf": 1 NA NA
$ f: Factor w/ 1 level "dfsfsdf": 1 NA NA
I used source to debug and made sure that each variable in each loop was not NA or NULL. I also used class() to make sure each variable is character type - how could a vector of characters combine with an character type data frame would change everything into factors?
Please help. Thanks.
for(i in 1:3){
dat<-rbind(dat,setNames(as.list(c(a,b,c,d,e,f)),names(dat)))
}
dat[,1:6] <-apply(dat[,1:6],2, as.character)
str(dat)
'data.frame': 3 obs. of 6 variables:
$ a: chr "sdfsaf" "sdfsaf" "sdfsaf"
$ b: chr "dfadasfsd" "dfadasfsd" "dfadasfsd"
$ c: chr "fdsfsadf" "fdsfsadf" "fdsfsadf"
$ d: chr "dfads" "dfads" "dfads"
$ e: chr "sfdsfdsf" "sfdsfdsf" "sfdsfdsf"
$ f: chr "dfsfsdf" "dfsfsdf" "dfsfsdf"