2

場合によっては(私はまだRの初心者です!)、複数行の命令を「そのまま」単純な行の命令にマージできないことに気づきました。私が最近オンラインで行ったレッスンにある例を見てみましょう。

> make.power <- function(n) {
+     pow <- function(x) {
+         x^n
+         }
+         pow
+     }

'make.power'関数の定義です。次に、「キューブ」または二乗関数を定義できます

> cube <- make.power(3)
> square <- make.power(2)

次に、まったく同じ構文で1行にmake.powerを定義しようとすると、次のようになります。

> make.power <- function(n) { pow <- function(x) { x^n } pow }

これにより、「make.power ...」に予期しないシンボルが表示されます。これにより、次の1行のコードが機能します。

> make.power <- function(n) { pow <- function(x) { x^n }}

また、複数行に切り替えても機能します。

> make.power <- function(n) {
+     pow <- function(x) {
+         x^n
+         }
+     }

私はかなり混乱していることを認めなければなりません。私の質問は次のとおりです。

  1. 複数行のコードを1行の命令にマージできないのはなぜですか?
  2. 関数の最初の複数行の定義では、関数が定義された直後に「pow」関数をリコールする必要があるのはなぜですか。リコールなしの同じコードで問題ないため、これは明らかに重要ではありません。

編集:#Dwinの回答に続いて、次の式が正しいことは次のとおりです。

> make.power <- function(n) { pow <- function(x) { x^n }; pow }

完璧に動作します。そしてこれもそうです:

> make.power <- function(n){; pow <- function(x) {; x^n }; pow }

つまり、「;」のようです。場合によっては(ここでは「}」と2番目の「pow」の間)必須であり、他の場合(「{」と最初の「pow」の間)では必須ではありませんか?

4

1 に答える 1

8

キャリッジリターン(または改行)はコマンドを分離します。(前に「式」を区切ると言いましたが、Rでは実際には正しい用語ではありません。Rの意味での「式」は実際にはコンマで区切られます。)行内にセミコロンを挿入すると、同じようになります。効果。不要なものがあるという事実にもかかわらず、これはその事実の例として機能します。

make.power <- function(n) { pow <- function(x) { x^n }; pow }

help()私が見たどのファイルにも、このように記載されているものが見つからなかったことに、私はかなりがっかりしました。?Syntaxタイピングすることで、何か関連性のあるものが見つかるはずだと思いました。私が思いついた最高のものはそのhelp(parse)ページでした、そしてそこでさえ、例を見ることによってのみあなたはこれを推測することができたでしょう。「IntrotoR」を読んだことを期待されていたと思いますが、それを説明する必要があると私は合理的に確信しています。はい、セクション1.8にあります。

Q2への回答:内部関数(...)の「<-」を「pow」に割り当てるプロセス中に、外部関数呼び出しに返される値は、名前の付いたものではなく、名前のない関数でした。 "捕虜"。それがあなたの最初のコメントに対する私のコメントのポイントでした。それはおそらく、「IntrotoR」から得られると予想されていたよりも微妙な点です。returnオブジェクトの一部のみの割り当てが最後のコマンドである場合、この関数が必要になることがありますが、この場合、最もコンパクトなコードは次のようになります。

make.power <- function(n) { function(x) { x^n } }
于 2013-01-13T21:30:32.220 に答える