Reputation: 1109
> test <- data.frame()
> test<-rbind(test,c("hi","i","am","bob"))
> test<-rbind(test,c("hi","i","am","alice"))
Warning message:
In `[<-.factor`(`*tmp*`, ri, value = "alice") :
invalid factor level, NAs generated
Why does this minimal example produce that error? I want to append several string-rows to an empty data frame.
Upvotes: 3
Views: 17198
Reputation: 603
Problem is that R, by default, understands characters as factors. In order to avoid this behaviour:
options(stringsAsFactors = FALSE)
test <- data.frame()
test<-rbind(test,c("hi","i","am","bob"))
test<-rbind(test,c("hi","i","am","alice"))
Upvotes: 5
Reputation: 81713
You can store your information in a character matrix. Of course, you can convert this matrix into a data frame using as.data.frame
and the argument stringsAsFactors = FALSE
.
> test <- matrix(c("hi","i","am","bob"), nrow = 1)
> test <- rbind(test, c("hi","i","am","alice"))
> test
[,1] [,2] [,3] [,4]
[1,] "hi" "i" "am" "bob"
[2,] "hi" "i" "am" "alice"
> testDF <- as.data.frame(test, stringsAsFactors = FALSE)
> testDF <- rbind(testDF, c("hi","i","am","happy"))
> testDF
V1 V2 V3 V4
1 hi i am bob
2 hi i am alice
3 hi i am happy
Upvotes: 9