[Rd] readLines function with R >= 3.5.0
Martin Maechler
m@echler @ending from @t@t@m@th@ethz@ch
Mon May 28 10:41:15 CEST 2018
>>>>> 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
More information about the R-devel
mailing list