17

identical()以下の最後の 2 行のコード (呼び出し)で異なる結果が得られる理由を誰かに説明してもらえますか? これら 2 つのオブジェクトは同一のオブジェクトのように見えますが、適用関数で使用すると、いくつかの問題が発生します。

df <- data.frame(a = 1:5, b = 6:2, c = rep(7,5))
df_ab <- df[,c(1,2)]
df_AB <- subset(df, select = c(1,2))
identical(df_ab,df_AB)
[1] TRUE

apply(df_ab,2,function(x) identical(1:5,x))
    a     b 
TRUE FALSE

apply(df_AB,2,function(x) identical(1:5,x))
    a     b 
FALSE FALSE
4

4 に答える 4

8

1:5値を列の値と比較する場合は、関数が適用される前にデータ フレームが行列に変換されるため、apply使用しないでください。applyで作成されたサブセットの行名のため[(@Joshua Ulrich の回答を参照)、値1:5は同じ値を含む名前付きベクトルと同一ではありません。

代わりに、関数を列sapplyに適用するために使用する必要があります。identicalこれにより、データ フレームが行列に変換されるのを回避できます。

> sapply(df_ab, identical, 1:5)
    a     b 
 TRUE FALSE 
> sapply(df_AB, identical, 1:5)
    a     b 
 TRUE FALSE 

ご覧のとおり、両方のデータ フレームで、最初の列の値は と同じです1:5

于 2014-10-20T15:22:23.723 に答える