2012-06-13 35 views
54

我創建了一些R代碼,供R誰不知道的人使用(儘管我自己很綠)。我一直在讓人們將最初的數據粘貼到R控制檯(結果混雜),並且我希望爲人們輸入數據建立更友好的用戶界面。創建提示/答案系統,將數據輸入到R

理想情況下,有人可以坐在控制檯上,鍵入一個命令,並提示有關如何輸入數據的具體問題。

例如,一個人負荷高達r和看到一個提示:

What is x value? 

的人類型:

2 

下一頁提示:

What is y value? 

人類型:

3 

下一頁提示:

What are T values? 

人類型:

4,3,2,1 

下一頁提示:

什麼爲V值?

人類型:

4,5,6,9 

以及與這些4個新定義的變量(X,Y,T,V)R的下一個步驟是運行該預先編寫的代碼

X+Y 
V+T 

而在控制檯的答案彈出

5 
8 8 8 10 

而且皆大歡喜

我很抱歉,因爲這不是一個可重現的代碼類型的問題,但我不知道如何處理讓R問問題,而不是問我關於R的問題!

回答

47

由於這應該只用作交互式代碼,readline()可以爲你工作。我沒有添加任何錯誤檢查,但您可能需要做相當多的工作以確保正確輸入。這裏的核心理念,但:

fun <- function(){ 
    x <- readline("What is the value of x?") 
    y <- readline("What is the value of y?") 
    t <- readline("What are the T values?") 
    v <- readline("What are the V values?") 

    x <- as.numeric(unlist(strsplit(x, ","))) 
    y <- as.numeric(unlist(strsplit(y, ","))) 
    t <- as.numeric(unlist(strsplit(t, ","))) 
    v <- as.numeric(unlist(strsplit(v, ","))) 

    out1 <- x + y 
    out2 <- t + v 

    return(list(out1, out2)) 

} 
+2

代碼的偉大工程!我對於如何啓動它有點困惑,但是在readline()上查看註釋之後,我剛剛在上面的「if(interactive())fun()」中添加了最後一行,並自動啓動提示。謝謝! – Vinterwoo

+1

這很好。但是,我一直試圖理解unlist和strsplit函數到底發生了什麼。 R在這裏做什麼? – Seanosapien

+1

@Seanosapien如果用戶在原始示例中鍵入''4,3,2,1'',那麼strsplit對於從輸入中去除逗號是必要的。如果輸入不是這種格式,則不需要。 –

7

因爲這個問題被帶到死而復生,它可能寫一個更新的答案。

如果GUI是在這種情況下,在所有有幫助的,閃亮的包現在很好地集成與RStudio,這將是非常容易實現這是一個閃亮的應用。網站http://shiny.rstudio.com有更多信息,包括示例和文檔。

5

對於這種特殊情況,這可能是矯枉過正,但swirl包有利於交互式地將R引入初學者。

swirl是一種R編程語言的軟件包,它將R控制檯變成一個交互式學習環境。用戶收到 即時反饋,因爲他們通過 數據科學和R編程的自學課程進行指導。

生成內容的指令可以在這裏找到:http://swirlstats.com/instructors.html

21

另請參閱?menuutils獲取一個簡單的文本基本菜單界面和提示符,它也用於devtools

下面是一個例子:

> menu(c("Yes", "No"), title="Do you want this?") 
Do you want this? 

1: Yes 
2: No 

Selection: 
相關問題