我有一个脚本,我想用键盘输入启动它,然后继续基于在此变量中输入的值的工作,我试过y=readline("please enter a value")
但脚本不会等待输入一个值,它只是显示这个句子并继续,如何做到这一点? 在此先感谢?停止脚本,直到从键盘输入值R
回答
你可能想scan()
,是这样的:
print("please enter a value")
y <- scan(file = "", what = "", nmax = 1)
scan()
将等待用户输入任何文字将被存储在y
- 模式字符在这种情况下,一个载体。
@mdsumner:你好,它不工作,它和readline一样,它打印句子然后它写(读0行)和脚本继续,顺便说一句我在Windows上运行脚本,与2点击它(它运行在一个命令),thnx – weblover 2011-04-01 21:47:11
像以前一样,和加文辛普森提供您的原始问题,你正在做什么的完整描述,你正在用来做什么,你期望经历什么,以及你实际经历什么都会有帮助。这是交互式使用的R代码,如输入到R控制台中一样。如果代码是来自文件的source()d,它也可以工作。 – mdsumner 2011-04-01 23:58:22
@abd正如我所说 - 'readline()'只在交互式会话中可用。您正在非交互式shell会话中运行此操作。因此它**不会**工作。我在我之前的评论中曾这样说过! – 2011-04-02 00:29:05
这是一个非常简单的#!
脚本,它创建一个函数foo()
,其唯一目的是回显它的参数'bar'
。
#! /home/gavin/R/2.13-patched/build/bin/Rscript --vanilla
foo <- function(bar) {
writeLines(paste("You supplied the following information:", bar))
}
## grab command arguments passed as -args
args <- commandArgs(TRUE)
## run foo
foo(args)
我们抢过去了,从使用功能commandArgs()
外壳脚本的命令行参数,然后把它们传递给foo()
与脚本的最后一行。
如果我们在文件foobar.R
中有那么一点代码,那么我们可以传入参数并使用Rscript
接口运行脚本。您还需要使上述可执行文件(chmod
it)。
然后脚本可以被称为像工作原理如下:
[[email protected] ~]$ ./foobar.R Cl
You supplied the following information: Cl
但是做作为不幸的是注意在3210的信息,标准的Windows CMD弹不知道#!
像脚本,所以你可能需要安装一些其他的shell(帮助建议一个Cygwin shell应该工作)来使用我展示的功能。
更新:使用source()
和readline()
。
另一种方法是,如果你不需要非交互式地运行(即你不打开R GUI并运行一行代码),那么只需要source()
脚本。例如,如果这是一个脚本调用barfoo.R
:
dynamicwilcox <- function() {
ANSWER <- readline("What column do you want to work on? ")
if(ANSWER=="Ph") {
writeLines("column was 'Ph'")
} else if(ANSWER=="Cl") {
writeLines("column was 'Cl'")
} else {
writeLines(paste("Sorry, we don't know what to do with column", ANSWER))
}
ANSWER ## return something
}
dynamicwilcox()
从R桂提示
然后,我们可以这样做:
R> source("barfoo.R")
What column do you want to work on? Cl
column was 'Cl'
,或者如果你不想指定完整路径做这样的:
R> source(file.choose())
readline()
在交互式R对话时工作得很好,确实是这个职位的最佳工具 - 这正是它被屈尊做。
整个前提条件是您希望以批处理模式运行脚本,但提供一些输入没有多大意义。 R期望脚本在批处理模式下运行时是自包含的。您可能没有意识到,但是当您双击脚本时,它将以批处理模式运行。
@adb你有没有在Windows上工作? – 2011-04-02 12:47:28
是的,非常感谢,它的作品:) – weblover 2011-04-03 12:22:14
我在Ubuntu(不是Windows)上遇到了同样的问题并找到了解决方案。
而不是Rscript
使用littler(/usr/bin/r
)并确保将互动标志-i
传递给小生。这种组合设法说服readline()
根据需要在脚本的工作:
#!/usr/bin/r -vi
eprintf <- function(...) cat(sprintf(...), sep='', file=stderr())
prompt.read <- function(prompt="\n[hit enter to continue]: ") {
eprintf("%s", prompt)
invisible(readline())
}
ans <- prompt.read('Please enter a value: ')
eprintf("You have entered: '%s'\n", ans)
# rest of script comes here...
当我运行一个脚本,我得到:
$ ./rl.r
Please enter a value: 42
You have entered: '42'
$ ./rl.r
Please enter a value: Hello to you!
You have entered: 'Hello to you!'
安装利特勒(在Ubuntu):
sudo apt-get install littler
- 1. 停止键盘输入?
- 2. 全局键盘挂钩停止脚本
- 3. 从键盘输入到枚举的值
- 4. Java直接从键盘读取输入
- 5. 从R键盘读取输入
- 6. 停止执行R脚本,直到数据可用
- 7. 用Ruby编写键盘输入脚本
- 8. 收到用户输入运行php脚本与键盘用户输入值
- 9. JApplet不停止或反应到键盘输入
- 10. 防止键盘输入到达窗口
- 11. 键盘挂钩,防止键盘输入到应用程序
- 12. C在输入键停止
- 13. C++直到输入结束通过键盘输入信号
- 14. 从python脚本制作键盘输入命令
- 15. XNA - 键盘文本输入
- 16. 停止程序的流程直到用户输入文本(c#)
- 17. 获取从键盘(或自定义键盘)输入的文本
- 18. 如何暂停脚本,直到用户输入发生
- 19. R闪亮的键盘输入绑定
- 20. 从键盘读取输入
- 21. 试图从键盘输入
- 22. 黄瓜:如何从键盘输入文本到文本字段?
- 23. 停止从动画键盘的UITableView
- 24. 为下拉列表停止键盘输入的自动回送
- 25. 做,而在键盘输入的无限循环停止 - Visual C
- 26. 通过键盘输入停止机器人
- 27. IOS 7 Safari停止时弹出键盘输入文字区域
- 28. 如何停止键盘在日历输入模式中打开
- 29. 扫描键盘输入而不暂停
- 30. 如何在bash脚本中输入键盘快捷键
你是如何运行你的脚本? 'readline()'只能交互使用。一个可重复的例子会有所帮助。 – 2011-03-31 23:44:52
@Gavin Simpson:我在windows上运行脚本,点击它(它以cmd运行),thnx – weblover 2011-04-01 21:48:27