[Rd] readLines function with R >= 3.5.0
Jennifer Lyon
jennifer@@@lyon @ending from gm@il@com
Wed Jun 13 01:46:29 CEST 2018
Hi:
I have also just stumbled into this bug. Unfortunately, I can not
change the data my program receives from stdin. My code runs in a
larger system and stdin is sent to a Docker container running my R
code. The protocol is I read a line, readLines("stdin", n=1), do some
actions, send output on stdout, and wait for the next set of data. I
don't have control over this protocol, so I can't use the ^D
workaround.
I am open for other workaround suggestions. The single line is
actually JSON and can be quite large. If there isn't something else
cleaner, I am going to try readChar() in a while loop looking for \n
but I'm guessing that would likely be too slow. I am open to other
workaround solutions. For the moment I have reverted back to R 3.4.4.
Thanks for any suggestions.
Jen.
>> >>>>> 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
[[alternative HTML version deleted]]
More information about the R-devel
mailing list