2016-04-12 6 views
3

RStudioに2つの値(名と姓)を入力する必要があるRスクリプトを開発しています。これらの入力は、後でテキスト文書のパターンマッチングに使用されます。ユーザーのプロンプトを要求して組み込むRスクリプトを実行

raw_inputはこれらの値を収集するために使用され、私はreadline(prompt =)がRの関連する関数であることを理解していますが、値を尋ねるスクリプトが停止しているようです。代わりに、次のコード行を追加します。

名のユーザーを促すMy機能は次のとおりです。

askForName <- function(firstOrLast){ 
    if(firstOrLast == "first"){ 
    x <- readline(prompt = "Enter first name: ") 
    } 
    else if(firstOrLast == "last"){ 
    x <- readline(prompt = "Enter last name: ") 
    } 
    return(x) 
} 

私は実行すると:

firstName <- askForName("first") 
lastName <- askForName("last") 

コンソールに戻ります:

私はRを待つように取得できますか
> firstName <- askForName("first") 
Enter first name: lastName <- askForName("last") 

スクリプトを進める前にユーザーが入力した値のために?

+0

これはどのように行うのかを示しています。とにかく、ドキュメンテーションは明らかに "[readline]はインタラクティブなセッションでしか使用できません"。 – Roland

+0

ユーザーがパラメータを関数のパラメータとして入力するか、すべての方法を使用して光沢のようなものを使用します。 – Roland

答えて

1

これらの関数呼び出しを含むスクリプトを実行すると、正しく動作します。この場合の問題は、 "readline"呼び出しの後に行を貼り付けることです。私はちょうどこれをテストし、うまく動作します。私が働いている会社で使用されているプロダクションコードと同じです。

test.R:次に

askForName <- function(firstOrLast){ 
    if(firstOrLast == "first"){ 
    x <- readline(prompt = "Enter first name: ") 
    } 
    else if(firstOrLast == "last"){ 
    x <- readline(prompt = "Enter last name: ") 
    } 
    return(x) 
} 

firstName <- askForName("first") 
lastName <- askForName("last") 

source("test.R") 
Enter first name: Alan 
Enter last name: O'Callaghan 
0

は、この代わりのreadlineをお試しください:

cat("a string please: ") 
a <- readLines("stdin",n=1); 
cat(a, "\n") 
0

あなたは()関数のtypelineを作成することができ、入力行を読み取るために次のコマンドにその結果を使用します。入力テキストがRstudioまたは端末でコードを実行するのを待ちます。

typeline <- function(msg="Enter text: ") { 
    if (interactive()) { 
    txt <- readline(msg) 
    } else { 
    cat(msg); 
    txt <- readLines("stdin",n=1); 
    } 
    return(txt) 
} 

firstname=typeline("firstName: ") 
secondname=typeline("secondName: ") 

print(firstname) 
print(secondname) 
関連する問題