Hello,

Inline.

Às 20:27 de 05/02/2025, peter dalgaard escreveu:
A 3rd option could be

scan(text=x, what="", blank.lines.skip=FALSE)

(all because readLines() doesn't obey the text=x convention, perhaps it should? 
I'm unsure whether the textConnection is left open in Rui's method.)

No, it is not left open. Use ?showConnections to check it.


x <- c("abc\ndef", "", "ghi")

x |> textConnection() |> readLines()
showConnections()

# this creates and opens a connection
tc <- textConnection(x)
showConnections()
readLines(tc)
showConnections()
close(tc)
showConnections()


Hope this helps,

Rui Barradas


-pd

On 5 Feb 2025, at 15:35 , Duncan Murdoch <murdoch.dun...@gmail.com> wrote:

Thanks to Rui, Peter and Tanvir!  Peter's seems to be the fastest of the 3 
suggestions so far on the little test case, but on the real data (where x 
contains several thousand lines), Rui's seems best.

Duncan

On 2025-02-05 9:13 a.m., peter dalgaard wrote:
This also seems to work:
strsplit(paste(x,collapse="\n"),"\n")[[1]]
[1] "abc" "def" ""    "ghi"
On 5 Feb 2025, at 14:44 , Duncan Murdoch <murdoch.dun...@gmail.com> wrote:

If I have this object:

  x <- c("abc\ndef", "", "ghi")

and I write it to a file using `writeLines(x, "test.txt")`, my text editor sees 
a 5 line file:

  1: abc
  2: def
  3:
  4: ghi
  5:

which is what I'd expect:  the last line in the editor is empty.  If I use 
`readLines("test.txt")` on that file, I get the vector

  c("abc", "def", "", "ghi")

and all of that is fine.

What I'm looking for is simple code that modifies x to the `readLines()` 
output, without actually writing and reading it.

My first attempt doesn't work:

  unlist(strsplit(x, "\n"))

because it leaves out the blank line 3.  I can fix that with this ugly code:

  lines <- strsplit(x, "\n")
  lines[sapply(lines, length) == 0] <- list("")
  lines <- unlist(lines)

Surely there's a simpler way to do this?  I'd like to use just base functions, 
no other packages.

Duncan Murdoch

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.




--
Este e-mail foi analisado pelo software antivírus AVG para verificar a presença 
de vírus.
www.avg.com

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to