Luigi Marongiu
2019-Apr-18 14:10 UTC
[R] Pause script at input from terminal (interactive use)
Dear all, I am trying to write an interactive script where the user type some input from the terminal. I used readline() but when I launch the file with Rscript, the function is overwritten directly, there is no waiting for the user's input. For instance, this example: VAR1 = as.numeric(readline(prompt = "Enter something -> ")) VAR2 = as.numeric(readline(prompt = "Enter something else -> ")) if(is.na(VAR1)) VAR1 = 0 if(is.na(VAR2)) VAR2 = "empty" cat("Input was: ", VAR1, " - ", VAR2, "\n") is executed till the end without typing anything on terminal : $ Rscript test.R Enter something -> Enter something else -> Input was: 0 - empty I also tried with ',1' at the end of readline, but the effect is the same. I should use the interactive() function but I am confused on its use. It is possible to launch R scritps in the interactive mode in the first place? and if yes, how? Or would python or julia be better choices in this case? Thank you. -- Best regards, Luigi
I am not an expert on Rscript, but I don't think that an actual terminal is ever used when using Rscript. And `interactive()` will probably always be false. So if you want the script to pause for input, you need to have some form of user interface to work with. One option is to use the tcltk package (this works on all OS's to my knowledge, but not if you are accessing the computer remotely). This answer on stack overflow shows some code that may help: https://stackoverflow.com/questions/16847621/get-data-out-of-a-tcltk-function/16847918#16847918 On Thu, Apr 18, 2019 at 8:11 AM Luigi Marongiu <marongiu.luigi at gmail.com> wrote:> > Dear all, > I am trying to write an interactive script where the user type some > input from the terminal. I used readline() but when I launch the file > with Rscript, the function is overwritten directly, there is no > waiting for the user's input. For instance, this example: > > VAR1 = as.numeric(readline(prompt = "Enter something -> ")) > VAR2 = as.numeric(readline(prompt = "Enter something else -> ")) > if(is.na(VAR1)) VAR1 = 0 > if(is.na(VAR2)) VAR2 = "empty" > cat("Input was: ", VAR1, " - ", VAR2, "\n") > > is executed till the end without typing anything on terminal : > > $ Rscript test.R > Enter something -> > Enter something else -> > Input was: 0 - empty > > I also tried with ',1' at the end of readline, but the effect is the > same. I should use the interactive() function but I am confused on its > use. > It is possible to launch R scritps in the interactive mode in the > first place? and if yes, how? Or would python or julia be better > choices in this case? > Thank you. > -- > Best regards, > Luigi > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.-- Gregory (Greg) L. Snow Ph.D. 538280 at gmail.com
Luigi Marongiu
2019-Apr-19 05:12 UTC
[R] Pause script at input from terminal (interactive use)
I am realizing as well that R is not the best option for an interactive session. I changed the script to get the input from a config file; it is less elegant because the procedure now requires double the files than with CLI input, but at the end of the day is more practical when most of the answer remains the same between sessions. Thanks. On Thu, Apr 18, 2019 at 8:47 PM Greg Snow <538280 at gmail.com> wrote:> > I am not an expert on Rscript, but I don't think that an actual > terminal is ever used when using Rscript. And `interactive()` will > probably always be false. > > So if you want the script to pause for input, you need to have some > form of user interface to work with. > > One option is to use the tcltk package (this works on all OS's to my > knowledge, but not if you are accessing the computer remotely). This > answer on stack overflow shows some code that may help: > https://stackoverflow.com/questions/16847621/get-data-out-of-a-tcltk-function/16847918#16847918 > > > On Thu, Apr 18, 2019 at 8:11 AM Luigi Marongiu <marongiu.luigi at gmail.com> wrote: > > > > Dear all, > > I am trying to write an interactive script where the user type some > > input from the terminal. I used readline() but when I launch the file > > with Rscript, the function is overwritten directly, there is no > > waiting for the user's input. For instance, this example: > > > > VAR1 = as.numeric(readline(prompt = "Enter something -> ")) > > VAR2 = as.numeric(readline(prompt = "Enter something else -> ")) > > if(is.na(VAR1)) VAR1 = 0 > > if(is.na(VAR2)) VAR2 = "empty" > > cat("Input was: ", VAR1, " - ", VAR2, "\n") > > > > is executed till the end without typing anything on terminal : > > > > $ Rscript test.R > > Enter something -> > > Enter something else -> > > Input was: 0 - empty > > > > I also tried with ',1' at the end of readline, but the effect is the > > same. I should use the interactive() function but I am confused on its > > use. > > It is possible to launch R scritps in the interactive mode in the > > first place? and if yes, how? Or would python or julia be better > > choices in this case? > > Thank you. > > -- > > Best regards, > > Luigi > > > > ______________________________________________ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > > and provide commented, minimal, self-contained, reproducible code. > > > > -- > Gregory (Greg) L. Snow Ph.D. > 538280 at gmail.com-- Best regards, Luigi
Ivan Krylov
2019-Apr-19 08:25 UTC
[R] Pause script at input from terminal (interactive use)
On Thu, 18 Apr 2019 16:10:41 +0200 Luigi Marongiu <marongiu.luigi at gmail.com> wrote:> It is possible to launch R scritps in the interactive mode in the > first place? and if yes, how?One option would be to use littler <http://dirk.eddelbuettel.com/code/littler.html> with its -i (--interactive) option. -- Best regards, Ivan
PIKAL Petr
2019-Apr-23 07:22 UTC
[R] Pause script at input from terminal (interactive use)
Hi Maybe you could think about transfering **script** to **function**. In function your construction seems to be OK. Cheers Petr> -----Original Message----- > From: R-help <r-help-bounces at r-project.org> On Behalf Of Luigi Marongiu > Sent: Thursday, April 18, 2019 4:11 PM > To: r-help <r-help at r-project.org> > Subject: [R] Pause script at input from terminal (interactive use) > > Dear all, > I am trying to write an interactive script where the user type some input from > the terminal. I used readline() but when I launch the file with Rscript, the > function is overwritten directly, there is no waiting for the user's input. For > instance, this example: > > VAR1 = as.numeric(readline(prompt = "Enter something -> ")) > VAR2 = as.numeric(readline(prompt = "Enter something else -> ")) > if(is.na(VAR1)) VAR1 = 0 > if(is.na(VAR2)) VAR2 = "empty" > cat("Input was: ", VAR1, " - ", VAR2, "\n") > > is executed till the end without typing anything on terminal : > > $ Rscript test.R > Enter something -> > Enter something else -> > Input was: 0 - empty > > I also tried with ',1' at the end of readline, but the effect is the same. I should > use the interactive() function but I am confused on its use. > It is possible to launch R scritps in the interactive mode in the first place? and if > yes, how? Or would python or julia be better choices in this case? > Thank you. > -- > Best regards, > Luigi > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting- > guide.html > and provide commented, minimal, self-contained, reproducible code.Osobn? ?daje: Informace o zpracov?n? a ochran? osobn?ch ?daj? obchodn?ch partner? PRECHEZA a.s. jsou zve?ejn?ny na: https://www.precheza.cz/zasady-ochrany-osobnich-udaju/ | Information about processing and protection of business partner?s personal data are available on website: https://www.precheza.cz/en/personal-data-protection-principles/ D?v?rnost: Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? a podl?haj? tomuto pr?vn? z?vazn?mu prohl??en? o vylou?en? odpov?dnosti: https://www.precheza.cz/01-dovetek/ | This email and any documents attached to it may be confidential and are subject to the legally binding disclaimer: https://www.precheza.cz/en/01-disclaimer/
Luigi Marongiu
2019-Apr-23 07:37 UTC
[R] Pause script at input from terminal (interactive use)
Thank you, I'll try that! On Tue, Apr 23, 2019 at 9:22 AM PIKAL Petr <petr.pikal at precheza.cz> wrote:> > Hi > > Maybe you could think about transfering **script** to **function**. > > In function your construction seems to be OK. > > Cheers > Petr > > > -----Original Message----- > > From: R-help <r-help-bounces at r-project.org> On Behalf Of Luigi Marongiu > > Sent: Thursday, April 18, 2019 4:11 PM > > To: r-help <r-help at r-project.org> > > Subject: [R] Pause script at input from terminal (interactive use) > > > > Dear all, > > I am trying to write an interactive script where the user type some input from > > the terminal. I used readline() but when I launch the file with Rscript, the > > function is overwritten directly, there is no waiting for the user's input. For > > instance, this example: > > > > VAR1 = as.numeric(readline(prompt = "Enter something -> ")) > > VAR2 = as.numeric(readline(prompt = "Enter something else -> ")) > > if(is.na(VAR1)) VAR1 = 0 > > if(is.na(VAR2)) VAR2 = "empty" > > cat("Input was: ", VAR1, " - ", VAR2, "\n") > > > > is executed till the end without typing anything on terminal : > > > > $ Rscript test.R > > Enter something -> > > Enter something else -> > > Input was: 0 - empty > > > > I also tried with ',1' at the end of readline, but the effect is the same. I should > > use the interactive() function but I am confused on its use. > > It is possible to launch R scritps in the interactive mode in the first place? and if > > yes, how? Or would python or julia be better choices in this case? > > Thank you. > > -- > > Best regards, > > Luigi > > > > ______________________________________________ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide http://www.R-project.org/posting- > > guide.html > > and provide commented, minimal, self-contained, reproducible code. > Osobn? ?daje: Informace o zpracov?n? a ochran? osobn?ch ?daj? obchodn?ch partner? PRECHEZA a.s. jsou zve?ejn?ny na: https://www.precheza.cz/zasady-ochrany-osobnich-udaju/ | Information about processing and protection of business partner?s personal data are available on website: https://www.precheza.cz/en/personal-data-protection-principles/ > D?v?rnost: Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? a podl?haj? tomuto pr?vn? z?vazn?mu prohl??en? o vylou?en? odpov?dnosti: https://www.precheza.cz/01-dovetek/ | This email and any documents attached to it may be confidential and are subject to the legally binding disclaimer: https://www.precheza.cz/en/01-disclaimer/ >-- Best regards, Luigi