[Rd] readLines function with R >= 3.5.0

Michael Lawrence l@wrence@mich@el @ending from gene@com
Wed Jun 13 14:24:07 CEST 2018


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