writeLines expects a list of strings. The easiest way to write this to a gzip file would be
df1 <- data.frame(id = seq(1,10,1), var1 = runif(10), var2 = runif(10)) gz1 <- gzfile("df1.gz", "w") write.csv(df1, gz1) close(gz1)
This will write it as gsipped csv. Also see write.table and write.csv2 for alternative ways of writing a file.
EDIT: Based on the updates to the message about the desired format, I made the following helper (quickly dumped together probably allows tons of simplification):
function(df) { rowCount <- nrow(df) dfNames <- names(df) dfNamesIndex <- length(dfNames) sapply(1:rowCount, function(rowIndex) { paste(rowIndex, '|', paste(sapply(1:dfNamesIndex, function(element) { c(dfNames[element], ':', df[rowIndex, element]) }), collapse=' ') ) }) }
So the result looks like
a <- data.frame(x=1:10,y=rnorm(10)) writeLines(myser(a)) # 1 | x : 1 y : -0.231340933021948 # 2 | x : 2 y : 0.896777389870928 # 3 | x : 3 y : -0.434875004781075 # 4 | x : 4 y : -0.0269824962632977 # 5 | x : 5 y : 0.67654540494899 # 6 | x : 6 y : -1.96965253674725 # 7 | x : 7 y : 0.0863177759402661 # 8 | x : 8 y : -0.130116466571162 # 9 | x : 9 y : 0.418337557610229 # 10 | x : 10 y : -1.22890714891874
And all that is needed is to pass gzfile to writeLines to get the desired result.
user295691
source share