Re: [Rd] problem with pipes, textConnection and read.dcf
> peter dalgaard > on Tue, 10 Aug 2021 22:00:16 +0200 writes: > It's not a pipe issue: >> textConnection(gsub(gsub(L, pattern = " ", replacement = ""), pattern = " ", replacement = "")) > Error in textConnection(gsub(gsub(L, pattern = " ", replacement = ""), : > argument 'object' must deparse to a single character string >> textConnection(gsub(L, pattern = " ", replacement = "")) > A connection with > description "gsub(L, pattern = \" \", replacement = \"\")" > class "textConnection" > mode"r" > text"text" > opened "opened" > can read"yes" > can write "no" > I suppose the culprit is that the deparse(substitute(...)) construct in the definition of textConnection() can generate multiple lines if the object expression gets complicated. >> textConnection > function (object, open = "r", local = FALSE, name = deparse(substitute(object)), > encoding = c("", "bytes", "UTF-8")) > This also suggests that setting name=something might be a cure. > -pd Indeed. In R 4.0.0, I had introduced the deparse1() short cut to be used in place of deparse() in such cases: NEWS has said • New function deparse1() produces one string, wrapping deparse(), to be used typically in deparse1(substitute(*)), e.g., to fix PR#17671. and the definition is a simple but useful oneliner deparse1 <- function (expr, collapse = " ", width.cutoff = 500L, ...) paste(deparse(expr, width.cutoff, ...), collapse = collapse) So I'm almost sure we should use deparse1() in textConnection (and will make check and potentially commit that unless ...) Martin >> On 10 Aug 2021, at 21:33 , Gabor Grothendieck wrote: >> >> This gives an error bit if the first gsub line is commented out then there is no >> error even though it is equivalent code. >> >> L <- c("Variable:id", "Length:112630 ") >> >> L |> >> gsub(pattern = " ", replacement = "") |> >> gsub(pattern = " ", replacement = "") |> >> textConnection() |> >> read.dcf() >> ## Error in textConnection(gsub(gsub(L, pattern = " ", replacement = ""), : >> ## argument 'object' must deparse to a single character string >> >> That is this works: >> >> L |> >> # gsub(pattern = " ", replacement = "") |> >> gsub(pattern = " ", replacement = "") |> >> textConnection() |> >> read.dcf() >> ## Variable Length >> ## [1,] "id" "112630" >> >> R.version.string >> ## [1] "R version 4.1.0 RC (2021-05-16 r80303)" >> win.version() >> ## [1] "Windows 10 x64 (build 19042)" >> >> -- >> Statistics & Software Consulting >> GKX Group, GKX Associates Inc. >> tel: 1-877-GKX-GROUP >> email: ggrothendieck at gmail.com >> >> __ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel > -- > Peter Dalgaard, Professor, > Center for Statistics, Copenhagen Business School > Solbjerg Plads 3, 2000 Frederiksberg, Denmark > Phone: (+45)38153501 > Office: A 4.23 > Email: pd@cbs.dk Priv: pda...@gmail.com > __ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Re: [Rd] problem with pipes, textConnection and read.dcf
It's not a pipe issue: > textConnection(gsub(gsub(L, pattern = " ", replacement = ""), pattern = " ", > replacement = "")) Error in textConnection(gsub(gsub(L, pattern = " ", replacement = ""), : argument 'object' must deparse to a single character string > textConnection(gsub(L, pattern = " ", replacement = "")) A connection with description "gsub(L, pattern = \" \", replacement = \"\")" class "textConnection" mode"r" text"text" opened "opened" can read"yes" can write "no" I suppose the culprit is that the deparse(substitute(...)) construct in the definition of textConnection() can generate multiple lines if the object expression gets complicated. > textConnection function (object, open = "r", local = FALSE, name = deparse(substitute(object)), encoding = c("", "bytes", "UTF-8")) This also suggests that setting name=something might be a cure. -pd > On 10 Aug 2021, at 21:33 , Gabor Grothendieck wrote: > > This gives an error bit if the first gsub line is commented out then there is > no > error even though it is equivalent code. > > L <- c("Variable:id", "Length:112630 ") > > L |> >gsub(pattern = " ", replacement = "") |> >gsub(pattern = " ", replacement = "") |> >textConnection() |> >read.dcf() > ## Error in textConnection(gsub(gsub(L, pattern = " ", replacement = ""), : > ## argument 'object' must deparse to a single character string > > That is this works: > > L |> ># gsub(pattern = " ", replacement = "") |> >gsub(pattern = " ", replacement = "") |> >textConnection() |> >read.dcf() > ## Variable Length > ## [1,] "id" "112630" > > R.version.string > ## [1] "R version 4.1.0 RC (2021-05-16 r80303)" > win.version() > ## [1] "Windows 10 x64 (build 19042)" > > -- > Statistics & Software Consulting > GKX Group, GKX Associates Inc. > tel: 1-877-GKX-GROUP > email: ggrothendieck at gmail.com > > __ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel -- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Office: A 4.23 Email: pd@cbs.dk Priv: pda...@gmail.com __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
[Rd] problem with pipes, textConnection and read.dcf
This gives an error bit if the first gsub line is commented out then there is no error even though it is equivalent code. L <- c("Variable:id", "Length:112630 ") L |> gsub(pattern = " ", replacement = "") |> gsub(pattern = " ", replacement = "") |> textConnection() |> read.dcf() ## Error in textConnection(gsub(gsub(L, pattern = " ", replacement = ""), : ## argument 'object' must deparse to a single character string That is this works: L |> # gsub(pattern = " ", replacement = "") |> gsub(pattern = " ", replacement = "") |> textConnection() |> read.dcf() ## Variable Length ## [1,] "id" "112630" R.version.string ## [1] "R version 4.1.0 RC (2021-05-16 r80303)" win.version() ## [1] "Windows 10 x64 (build 19042)" -- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel