From m@echler @ending from @t@t@m@th@ethz@ch  Mon May 28 10:41:15 2018
From: m@echler @ending from @t@t@m@th@ethz@ch (Martin Maechler)
Date: Mon, 28 May 2018 10:41:15 +0200
Subject: [Rd] readLines function with R >= 3.5.0
In-Reply-To: <23307.48529.773039.904392@stat.math.ethz.ch>
References: <32da856c-a60a-974f-65ab-d7123e12e813@daqana.com>
 <23307.48529.773039.904392@stat.math.ethz.ch>
Message-ID: <23307.49323.908367.788461@stat.math.ethz.ch>

>>>>> Martin Maechler 
>>>>>     on Mon, 28 May 2018 10:28:01 +0200 writes:

>>>>> Ralf Stubner 
>>>>>     on Fri, 25 May 2018 19:18:58 +0200 writes:

    >> Dear all, I would like to draw you attention to this
    >> question on SO:
    >> https://stackoverflow.com/questions/50372043/readlines-function-with-new-version-of-r


    >> Based on the OP's code I used the script

    >> #######################################
    >> create_matrix <- function() {
    >> cat("Write the numbers of vertices: ")
    >> user_input <- readLines("stdin", n=1)
    >> user_input <- as.numeric(user_input)
    >> print(user_input)
    >> }
    >> create_matrix()
    >> #######################################

    >> and called it with "R -f <filename>" from the command line.

    >> With 'R version 3.4.4 (2018-03-15) -- "Someone to Lean On"' the script
    >> prints the inputed number as expected. With both 'R version 3.5.0
    >> (2018-04-23) -- "Joy in Playing"' and 'R Under development (unstable)
    >> (2018-05-19 r74746) -- "Unsuffered Consequences"' the script does not
    >> continue after inputing a number.

    > I can confirm.
    > It "works" if you additionally (the [Enter], i.e., EOL) you also
    > "send" an EOF -- in Unix alikes via  <Ctrl>-D

    > The same happens if you use  'Rscript <filename>'

    > I'm not the expert here, but am close to sure that we (R core)
    > did not intend this change, when fixing other somewhat subtle
    > bugs in Rscript / 'R -f'

    > Martin Maechler

The same behavior in regular R , no need for a script etc.

> str(readLines("stdin", n=1))

then in addition to the input  you need to "give" an EOF (Ctrl D) in R >= 3.5.0

Interestingly, everything works fine if you use  stdin() instead
of "stdin" :

> rr <- readLines(stdin(), n=1)
foo
> rr
[1] "foo"
> 
----------

So, for now use  stdin()  which is much clearer than the string
"stdin" anyway

Martin Maechler



[Rd] readLines function with R >= 3.5.0
Martin Maechler