[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