[Rd] readLines function with R >= 3.5.0
Michael Lawrence
l@wrence@mich@el @ending from gene@com
Wed Jun 20 04:53:52 CEST 2018
Hi Jen,
Please provide a reproducible example, since the original stack
overflow example works in both trunk and patched.
Thanks,
Michael
On Tue, Jun 19, 2018 at 3:45 PM, Jennifer Lyon
<jennifer.s.lyon using gmail.com> wrote:
> Hi Michael:
>
> I can confirm Martin's comment. I tested my software with r-devel (r74914)
> and it works, while with r-patched (r74914) it does not work (it hangs, as
> it did in R 3.5.0). I apologize for it taking so long for me to test this,
> but is there any chance this fix could make into R 3.5.1?
>
> Thanks.
>
> Jen.
>
> On Wed, Jun 13, 2018 at 6:24 AM, Michael Lawrence
> <lawrence.michael using gene.com> wrote:
>>
>> Are you sure it's not available in patched? It's definitely in the
>> source since 6/1.
>>
>> Michael
>>
>>
>> On Wed, Jun 13, 2018 at 2:19 AM, Martin Maechler
>> <maechler using stat.math.ethz.ch> wrote:
>> >>>>>> 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