From pd@|gd @end|ng |rom gm@||@com  Tue Aug 10 22:00:16 2021
From: pd@|gd @end|ng |rom gm@||@com (peter dalgaard)
Date: Tue, 10 Aug 2021 22:00:16 +0200
Subject: [Rd] problem with pipes, textConnection and read.dcf
In-Reply-To: <CAP01uRn+6zWEgmyGfNTb3aJJoLCy8mbhJFj6SiWWBktmXwsncA@mail.gmail.com>
References: <CAP01uRn+6zWEgmyGfNTb3aJJoLCy8mbhJFj6SiWWBktmXwsncA@mail.gmail.com>
Message-ID: <A454DA3A-BD8D-418C-90FC-E5DE1CBB0725@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.

> 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 <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



[Rd] problem with pipes, textConnection and read.dcf
peter dalgaard