'writing a data.frame using cat

How can I add/append data.frame abc to the text file that I have opened previously. I am writing some important information to that file and then I want to append that data.frame below that information. I get an error when I try to write the data.frame abc using cat.

fileConn<-file("metadata.txt","w+")
smoke <- matrix(c(51,43,22,92,28,21,68,22,9),ncol=3,byrow=TRUE)
smoke <- as.data.frame(smoke)
table <- sapply (smoke, class)
abc <- data.frame(nm = names(smoke), cl = sapply(unname(smoke), class))
cat("some imp info","\n", file=fileConn)
cat(abc,"\n", file=fileConn)
close(fileConn)
class(abc)


Solution 1:[1]

Just use the standard tools for writing data.frame's, i.e. write.table:

write.table(abc, 'yourfile', append=TRUE) # plus whatever additional params

Solution 2:[2]

Try this

capture.output(abc, file = fileConn)

Solution 3:[3]

To make sure the output is readable, you could use also knitr::kable(). This will print your table as character, which has the advantage that you can embed it directly within the cat() call. It has lso several printing options (digits, align, row.names) etc that make it easy to control for how your table is printed:

tab <- knitr::kable(head(swiss))

cat("This is my file:",
    "Some important note about it",
    tab,
    sep="\n")
#> This is my file:
#> Some important note about it
#> |             | Fertility| Agriculture| Examination| Education| Catholic| Infant.Mortality|
#> |:------------|---------:|-----------:|-----------:|---------:|--------:|----------------:|
#> |Courtelary   |      80.2|        17.0|          15|        12|     9.96|             22.2|
#> |Delemont     |      83.1|        45.1|           6|         9|    84.84|             22.2|
#> |Franches-Mnt |      92.5|        39.7|           5|         5|    93.40|             20.2|
#> |Moutier      |      85.8|        36.5|          12|         7|    33.77|             20.3|
#> |Neuveville   |      76.9|        43.5|          17|        15|     5.16|             20.6|
#> |Porrentruy   |      76.1|        35.3|           9|         7|    90.57|             26.6|

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 eddi
Solution 2 lukeA
Solution 3 Matifou