2

data.frame で、<-非常に奇妙な出力が得られることがありますが、その理由は何ですか?

x<-data.frame(name<-c("n1","n2"),age<-c(5,6))
y<-data.frame(name=c("n1","n2"),age=c(5,6))
> x
name....c..n1....n2.. age....c.5..6.
1                    n1              5
2                    n2              6
> y
  name age
1   n1   5
2   n2   6

ここで data.frame の <- と = の意味の違いは何ですか?

4

3 に答える 3

8

いいえ、これはおかしくありません。名前付きオブジェクトと名前なしオブジェクトを使用して data.frame のコンストラクターを呼び出します。

当初、data.frame はリストであると想定し、help(list) を使用して data.frame の動作を説明しました。哲学でさえ同じです(名前付きおよび名前なしの引数)それは間違いであり、答えはdata.frameの助けにあります

?data.frame から、引数の名前について説明するこの部分を取り上げます。

引数がすべて名前付きの単純なオブジェクト (リストではなく、データ フレームの行列) である場合、引数名は列名を示します。名前のない単純な引数の場合、引数の逆解析バージョンが名前として使用されます (囲んでいる I(...) が削除されます)。

そう

x<-data.frame(name<-c("n1","n2"),age<-c(5,6))

これは次と同等です:

 x <- data.frame(c("n1","n2"),c(5,6))   ## unnamed objects The functions return dotted pair list 
 name<-c("n1","n2")
 age<-c(5,6)

次に y

y<-data.frame(name=c("n1","n2"),age=c(5,6))  ## named objects functions return a list 

ただし、これは単純なオブジェクト引数の命名手順のみを説明していることに注意してください。命名は、いくつかのドットを追加するよりも複雑です。たとえば、これら2つのステートメントが同等であることは非常に驚くべきことです(check.names = TまたはFを使用):

         a <- data.frame(y <- list(x=1)) 
         a <- data.frame(y = list(x=1)) 
于 2012-12-30T07:50:46.180 に答える
7

はい、そう思います。式age<-c(5,6)は結果 ( の値<-) を返しますが、引数リストの形式に適切な代入演算子を使用できなかったため、完全な式が列の名前として check.names に渡されました。すべての無効な文字をドットに変換します。check.names が呼び出されないようにすることができます (通常、これを行う必要はありません。

> x<-data.frame(name<-c("n1","n2"),age<-c(5,6), check.names=FALSE)
> x
  name <- c("n1", "n2") age <- c(5, 6)
1                    n1              5
2                    n2              6
于 2012-12-30T07:54:54.683 に答える
0

Rは、多くの言語と同様に、裏返しに機能します。したがって、xの例では、「名前」には「n1」と「n2」の値、「年齢」の値は5と6が割り当てられていますが、データが.frame が作成されると、これらの列の名前は、特殊文字がドットになる完全な文字列として R によって解釈されます... y の例の構文に固執するのが最善です。

于 2012-12-30T08:13:56.753 に答える