我有一個腳本,我想用鍵盤輸入啓動它,然後繼續基於在此變量中輸入的值的工作,我試過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