write.arff consider boolean as numeric, so you find the attributes as numeric but the values as TRUE or FALSE.
I'm new with R, but the last else clause in the function write.arff doesn't look a good practice.
text <- paste(text, "numeric")
But maybe there is a reason behind that. I order to fix it I have added a condition for booleans (in my format, TRUE - FALSE).