1

一度にRに貼り付けることができるスクリプトが欲しいです。理想的には、このスクリプトには、さまざまな関数が散在するコード行が含まれます。しかし、今のところ、コードの一部を一度に1つずつ貼り付ける必要があります。これは、(私が書いたように)その下のコードと同時に実行すると関数が機能しないためです。

以下のコードでは、ユーザーに初期データを入力してもらい、それに対して計算を実行してもらいたいと思います。複数の「readline」呼び出しを連続して実行できないため、それらをDefineという関数にまとめました。しかし、次のコードを一度にRに貼り付けると、機能しません。

Define<-function(){
N<-readline("EnterDeployment #  ")
Y<-as.numeric(readline("What Year was the Deployment?   "))
L<-as.numeric(readline("What is the Distance?   "))

return(list("Year"=Y,"Name"=N, "Length"=L))     
}

Def<-Define()

Name<-Def$Name
Year<-Def$Year
L<-Def$Length

readline(paste("UPDN=",Name,"Year=",Year,"Distance=",L,"If this is correct press Return", sep=" "))


D<-L/4
F<-D*5

しかし、それをセグメントに分割すると、問題なく機能します。単一または複数の関数をコード行に組み込む方法はありますか?

4

1 に答える 1

5

関数に他のステップも含まない理由はありません。それは問題を解決し、よりきちんとした私見になるでしょう。

FOO <- function() {
  Define<-function(){
    N<-readline("EnterDeployment #  ")
    Y<-as.numeric(readline("What Year was the Deployment?   "))
    L<-as.numeric(readline("What is the Distance?   "))

    list("Year"=Y,"Name"=N, "Length"=L)
  }
  Def<-Define()

  Name<-Def$Name
  Year<-Def$Year
  L<-Def$Length

  readline(paste("UPDN=",Name,"Year=",Year,"Distance=",L,
                 "If this is correct press Return",    
                 sep=" "))

  D<-L/4
  F<-D*5
  list(D = D, F = F)
}

使用中:

> FOO()
EnterDeployment #  12
What Year was the Deployment?   2012
What is the Distance?   54
UPDN= 12 Year= 2012 Distance= 54 If this is correct press Return
$D
[1] 13.5

$F
[1] 67.5

もちろん、を含むファイルが必要にsource()なりますが、それは問題ありません。.RFOO()

なぜこれが望ましいのですか?このような関数に含まれるすべてのステップをカプセル化する方が適切です。また、中間ステップとして作成されたオブジェクトを汚染することもありません。最後に、これを他のユーザーに渡す場合は、Rパッケージとしてパッケージ化できます(ドキュメントを作成する必要はありません。必要最低限​​の.Rdファイルを追加するだけです)。

于 2013-03-26T22:59:18.730 に答える