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
?s 13:44 de 05/02/2025, Duncan Murdoch escreveu:> 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 at 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.Hello, Use ?textConnection. The 5th line is left out, just like in your code. x <- c("abc\ndef", "", "ghi") x |> textConnection() |> readLines() # [1] "abc" "def" "" "ghi" Hope this helps, Rui Barradas -- Este e-mail foi analisado pelo software antiv?rus AVG para verificar a presen?a de v?rus. www.avg.com
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.duncan at 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 at 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.-- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Office: A 4.23 Email: pd.mes at cbs.dk Priv: PDalgd at gmail.com
x <- c("abc\ndef", "", "ghi")
unlist(strsplit(gsub("^$", "\n", x), "\n"))
or?
x %>%
? gsub("^$", "\n", .) %>%
? strsplit("\n") %>%
? unlist()
Regards.............
Tanvir Ahamed
Stockholm, Sweden???? |??mashranga at yahoo.com
On Wednesday, February 5, 2025 at 02:44:37 PM GMT+1, Duncan Murdoch
<murdoch.duncan at 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 at 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.
On Wed, 5 Feb 2025 08:44:12 -0500 Duncan Murdoch <murdoch.duncan at 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")<SNIP> Apologies for muddying the waters with my ignorance, but why would you expect a 5 line file? I would expect a 4 line file, and that is indeed what I get when I try the code in question. If I append an empty line at the end of my test.txt and then apply readLines() to that file, I get [1] "abc" "def" "" "ghi" "", again as *I* would expect. What am I missing? Sorry for being a thicko. cheers, Rolf -- Honorary Research Fellow Department of Statistics University of Auckland Stats. Dep't. (secretaries) phone:readLines("test.txt") +64-9-373-7599 ext. 89622 Home phone: +64-9-480-4619