[Bioc-devel] write.table() of DataFrame introduces \n linebreaks in CSV output
Neumann, Steffen
@neum@nn @ending from ipb-h@lle@de
Wed Oct 24 22:22:28 CEST 2018
Hi,
we're seeing a problem with a S4Vectors::DataFrame
consisting of numbers and lists where write.table()
introduces "\n" linebreaks that render the written CSV
to be broken and unreadable.
The minimum example is:
library(S4Vectors)
l <- list(list(1), list(as.character(2:99)), list(3))
m <- matrix(1:9, nrow=3, ncol=3)
df <- cbind(DataFrame(m), DataFrame(do.call(rbind, l)))
write.table(df)
This results in
V1" "V2" "V3" "V1.1"
"1" 1 4 7 1
"2" 2 5 8 c("2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86",
=>"87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99")
"3" 3 6 9 3
where the second row is line-wrapped after the "86",
and the next line starts with "87" and the rest of the second row.
What we also observe is that as.character() of the offending cell
indeed contains a "\n" at an unexpected place:
> as.character(df[2,4])
[1] "c(\"2\", [...], \"85\", \"86\", \n\"87\", \"88\", [...], \"99\")"
This happens for both R-devel 2018-10-17 and S4Vectors_0.19.22
as well as R-3.4.4 with S4Vectors_0.16.0
It affects us in https://github.com/workflow4metabolomics/xcms/issues/116#issuecomment-432684024
Any ideas ?
Yours,
Steffen
--
IPB Halle AG Massenspektrometrie & Bioinformatik
Dr. Steffen Neumann http://www.IPB-Halle.DE
Weinberg 3 http://msbi.bic-gh.de
06120 Halle Tel. +49 (0) 345 5582 - 1470
+49 (0) 345 5582 - 0
sneumann(at)IPB-Halle.DE Fax. +49 (0) 345 5582 - 1409
More information about the Bioc-devel
mailing list