Gabor Grothendieck
2021-Aug-10 19:33 UTC
[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
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.> textConnectionfunction (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 <ggrothendieck at gmail.com> 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 at 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.mes at cbs.dk Priv: PDalgd at gmail.com
iuke-tier@ey m@iii@g oii uiow@@edu
2021-Aug-10 20:14 UTC
[Rd] [External] problem with pipes, textConnection and read.dcf
Not an issue with pipes. The pipe just rewrites the expression to a nested call and that is then evaluated. The call this produces is> quote(L |>+ gsub(pattern = " ", replacement = "") |> + gsub(pattern = " ", replacement = "") |> + textConnection() |> + read.dcf()) read.dcf(textConnection(gsub(gsub(L, pattern = " ", replacement = ""), pattern = " ", replacement = ""))) If you run that expression, or just the argument to read.dcf, then you get the error you report. So the issue is somewhere in textConnection(). This produces a similar message: read.dcf(textConnection(c(L, "aaaaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbb", "cccccccccccccccc", "ddddddddddddddddddd"))) File a bug report and someone who understands the textConnection() internals better than I do can take a look. Best, luke On Tue, 10 Aug 2021, 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)" > >-- Luke Tierney Ralph E. Wareham Professor of Mathematical Sciences University of Iowa Phone: 319-335-3386 Department of Statistics and Fax: 319-335-3017 Actuarial Science 241 Schaeffer Hall email: luke-tierney at uiowa.edu Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu