I'm new using R. I'm trying to add (append) new lines to a file with my existing data in R. The problem is that my data has about 30000 rows and 13000 cols. I already try to add a line with the writeLines
function but the resulting file contains only the line added.
Asked
Active
Viewed 1e+01k times
75

Josiah Yoder
- 3,321
- 4
- 40
- 58

Sergio Vela
- 751
- 1
- 5
- 3
-
Possible duplicate of [Write lines of text to a file in R](http://stackoverflow.com/questions/2470248/write-lines-of-text-to-a-file-in-r) – Michael Ohlrogge Jan 23 '17 at 22:26
-
3@MichaelOhlrogge Are you sure this is a dupe? The Q [Write lines of text to a file in R](http://stackoverflow.com/q/2470248/3817004) you have linked to is about writing lines to a file in general while this Q asks specifically about _appending_ lines to an existing file. – Uwe Jan 23 '17 at 23:04
-
@UweBlock True, but the linked Q discusses the append option in many of its answers. – Michael Ohlrogge Jan 23 '17 at 23:33
-
@MichaelOhlrogge It's just 2 of the 8 answers in the linked Q. Both suggest `cat()`. Both are rather terse. None of them explains why they use the `append` option or the effect this option has. No other answer (`writeLines()`, `sink()`) mention or discuss the `append` option. – Uwe Jan 24 '17 at 08:35
-
@UweBlock Ok, sure, I'll retract – Michael Ohlrogge Jan 24 '17 at 15:25
4 Answers
127
Have you tried using the write
function?
line="blah text blah blah etc etc"
write(line,file="myfile.txt",append=TRUE)

Andrew Brēza
- 7,705
- 3
- 34
- 40
-
13make sure you don't use a connection as file, but just put in the file path, otherwise append won't work! – Ansjovis86 Oct 28 '17 at 19:48
-
1@Ansjovis86 could you pls elaborate a bit more on "connection as file"? – munmunbb Dec 20 '17 at 05:47
-
@munmunbb This is only when you use a connect setup. If you don't have it don't worry about. If you have it, drop it from your code and this answer will work. – Ansjovis86 Dec 21 '17 at 09:12
-
1While this may be very obvious to many, I had alway previously read the existing file, used rbind to add a line to it and then written the updated file again. I now see that this is grossly inefficient and that using write to append a line is far faster. – JamesF Aug 24 '18 at 11:43
-
1`write` is not really meant to write a simple string to a file. [Use `cat` for that](https://stackoverflow.com/a/7741730/1048186). As [the documentation for the write command](https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/write) states, "The data (usually a matrix) `x` are written to file `file`." – Josiah Yoder Jun 10 '21 at 18:39
-
I've had issues with `write` doing very odd things with my data -- I'm guessing because it is somehow interpreting it. – Josiah Yoder Jun 10 '21 at 18:50
42
write.table
, write.csv
and others all have the append=
argument, which appends append=TRUE
and usually overwrites if append=FALSE
. So which one you want to / have to use, depends on your data.
By the way, cat()
can also be used to write text to a file and also has the append=
argument.
-
7
-
1For plain text data, use `cat()` instead of `write()`. As [the documentation for the write command](https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/write) states, "The data (usually a matrix) `x` are written to file `file`." `write()` is not meant for simple string data. It's meant to format more complex types and it wraps around `cat()` to do the actual writing to the file. When using `cat()`, you will need to `paste0(line,"\n")` to put a newline on the end of the file. – Josiah Yoder Jun 10 '21 at 18:53
1
lapply(listOfVector, function(anyNameofVect){ write(anyNameofVect, file="outputFileName", sep="\t", append=TRUE, ncolumns=100000) })
or
lapply(listOfVector, write, file="outputFileName", sep="\t", append=TRUE, ncolumns=100000)

Nathan Tuggy
- 2,237
- 27
- 30
- 38

Sailu Yellaboina
- 33
- 3
0
You can open a connection in append mode to append lines to an existing file with writeLines
.
writeLines("Hello", "output.txt") #Create file
CON <- file("output.txt", "a") #Open connection to append
writeLines("World", CON) #Append: World
writeLines("End", CON) #Append: End
close(CON) #Close connection
The same but using cat
.
cat("Hello\n", file = "output.txt")
cat("World\n", file = "output.txt", append = TRUE)
cat("End", file = "output.txt", append = TRUE)
In case of creating a file and appending subsequent.
CON <- file("output.txt", "w")
writeLines("Hello", CON)
writeLines("World", CON)
writeLines("End", CON)
close(CON)

GKi
- 37,245
- 2
- 26
- 48