[Rd] readLines function with R >= 3.5.0
Martin Maechler
m@echler @ending from @t@t@m@th@ethz@ch
Wed Jun 13 11:19:16 CEST 2018
>>>>> Michael Lawrence
>>>>> on Tue, 12 Jun 2018 19:27:49 -0700 writes:
> Hi Jen, This was already resolved for R 3.5.1 by just
> disabling buffering on terminal file connections like stdin.
and before R 3.5.1 exists, *and*
as the change is also not yet available in R patched (!)
this means using a version of
"R-devel", e.g. for Windows available from
https://cloud.r-project.org/bin/windows/base/rdevel.html
Martin
> Sounds like you might want to be running a web service or
> something instead though.
> Michael
> On Tue, Jun 12, 2018 at 4:46 PM, Jennifer Lyon
> <jennifer.s.lyon using gmail.com> wrote:
>> 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]]
>>
>> ______________________________________________
>> R-devel using r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list