2

これは、R: '=' および '<-' の代入演算子に関連しています。ただし、私の質問には答えがありません。

リンクされた質問と回答<-は、関数内で使用するとユーザーワークスペースで変数の割り当てが宣言されるため、関数が呼び出された後に変数を使用できることを説明しています。(編集者注:リンクされた回答には実際には記載されていません。記載されている場合、それは間違っているでしょう。引数リストの評価に関するステートメントを作成し、それをグローバル環境からのそのような関数の呼び出しに制限した場合、正しい。)

これは、次の動作の違いを説明しているようです。この次のコードは、data frame期待どおりの を生成します。

A <- data.frame(
  Sub = rep(c(1:3),each=3),
  Word = rep(c('Hap','Lap','Sap'),3),
  Vowel_Length = sample(c(1:100),9)
  )

結果は次のとおりです。

  Sub Word Vowel_Length
1   1  Hap           31
2   1  Lap            2
3   1  Sap           71
4   2  Hap           58
5   2  Lap           28
6   2  Sap           20
7   3  Hap           78
8   3  Lap           72
9   3  Sap           77

ただし、次のように関数<-内で使用するdata.frame()と、異なる結果が得られます。

B <- data.frame(
  Sub <- rep(c(1:3),each=3),
  Word <- rep(c('Hap','Lap','Sap'),3),
  Vowel_Length <- sample(c(1:100),9)
  )

この結果は次のとおりです。

  Sub....rep.c.1.3...each...3. Word....rep.c..Hap....Lap....Sap....3.
1                            1                                    Hap
2                            1                                    Lap
3                            1                                    Sap
4                            2                                    Hap
5                            2                                    Lap
6                            2                                    Sap
7                            3                                    Hap
8                            3                                    Lap
9                            3                                    Sap
  Vowel_Length....sample.c.1.100...9.
1                                  31
2                                  15
3                                   4
4                                   2
5                                  89
6                                  55
7                                  12
8                                  72
9                                  47

関数内で使用すると変数がグローバルに宣言されるため、リンクされた質問と回答が示すように<-、のヘッダーはそのグローバル宣言から継承されると思います。data frame[コメントを参照してください。]

ただし、たとえば、 の代わりに、またはの代わりSub....rep.c.1.3...each...3.に の最初の列のヘッダーとして取得する理由に興味があります。data frameSub <- rep(c(1:3),each=3),1 1 1 2 2 2 3 3 3

アップデート:

@AnandaMahto が削除されたコメントで指摘したように、に設定check.namesするとFALSE、次の動作が生成されます。

C <- data.frame(
  Sub <- rep(c(1:3),each=3),
  Word <- rep(c('Hap','Lap','Sap'),3),
  Vowel_Length <- sample(c(1:100),9),
  check.names=FALSE
)

結果は次のとおりです。

  Sub <- rep(c(1:3), each = 3) Word <- rep(c("Hap", "Lap", "Sap"), 3)
1                            1                                    Hap
2                            1                                    Lap
3                            1                                    Sap
4                            2                                    Hap
5                            2                                    Lap
6                            2                                    Sap
7                            3                                    Hap
8                            3                                    Lap
9                            3                                    Sap
  Vowel_Length <- sample(c(1:100), 9)
1                                  15
2                                   3
3                                  82
4                                  33
5                                  99
6                                  53
7                                  89
8                                  77
9                                  47

明確にするために、私の質問は、なぜこの動作が起こっているのかということです。特に、またはの代わりにヘッダーとして取得するのはなぜですか。Sub....rep.c.1.3...each...3.Sub <- rep(c(1:3),each=3),1 1 1 2 2 2 3 3 3check.names=TRUE

そして今、なぜあなたがSub <- rep(c(1:3),each=3),ヘッダーとしてcheck.names=FALSE?を取得するのかにも興味があると思います.

4

3 に答える 3

4

あなたの質問は、R が最終的に使用する奇妙な命名に関するものであり、スペースや < などがないのはなぜか疑問に思っているようです。

それが実際の質問である場合は、 のcheck.names引数を確認する必要がありますdata.frame

から?data.frame:

check.names 論理的。その場合TRUE、データ フレーム内の変数の名前がチェックされ、それらが構文的に有効な変数名であり、重複していないことが確認されます。必要に応じて、(によってmake.names) 調整されます。

check.namesしたがって、次のように設定することで、期待していた名前を取得できますFALSE

B <- data.frame( Sub <- rep(c(1:3),each=3), 
                 Word <- rep(c('Hap','Lap','Sap'),3), 
                 Vowel_Length <- sample(c(1:100),9),
                 check.names = FALSE)
B
#   Sub <- rep(c(1:3), each = 3) Word <- rep(c("Hap", "Lap", "Sap"), 3)
# 1                            1                                    Hap
# 2                            1                                    Lap
# 3                            1                                    Sap
# 4                            2                                    Hap
# 5                            2                                    Lap
# 6                            2                                    Sap
# 7                            3                                    Hap
# 8                            3                                    Lap
# 9                            3                                    Sap
#   Vowel_Length <- sample(c(1:100), 9)
# 1                                  33
# 2                                  20
# 3                                   5
# 4                                  83
# 5                                  99
# 6                                  79
# 7                                  58
# 8                                  46
# 9                                  44
于 2013-09-04T18:48:03.213 に答える