2016-06-17 7 views
0

RのqualityToolsパッケージ内でpcr関数を使用しようとしています。なぜ1つのベクトルを使用して、次のものを拒否するのかわかりません。R: `qualityTools`の` pcr`がベクタを拒否しているのはなぜですか?

pcrは喜んでrnorm

x <- rnorm(100, mean = 7, sd = .5) 
pcr(x, distribution = "normal", 6.5, 7.5) 

で私が作る何かを取るしかし、私は私のデータセットから得たベクトルは、colMeans(x)でエラー

y <- na.omit(myData$vals) 
pcr(y, distribution = "normal", 6.5, 7.5 

エラースロー:xはの配列でなければなりませんが少なくとも2つの寸法

私はcolMeanspcrのどこかにあると思いますが、colMeansxyに電話すると、その両方にエラーが発生します。

しかし、私のデータセットの値は拒否されます。それらは因子として入ってきた数値で、私はas.numeric(levels(f))[f]を使用してそれらをフォーマットしました。私が見ることができる唯一の違いは、xnumと表示され、yatomicとラベルされていますが、その違いがどういうものなのかわかりません。

編集:

str(y)が悪いの書式設定やエチケットのためのatomic [1:2038] 7.13 7.12 7.09 7.1 7.1 7.1 7.09 7.07 7.1 7.09 ... - attr(*, "na.action")=Class 'omit' int [1:4] 525 1548 2041 2042

謝罪のように見え、多くの場合、質問をしないでください。

+1

あなたは 'str(y)'を投稿して、どういう意味があるのでしょうか? – Gregor

+0

'pcr(as.numeric(y)、distribution =" normal "、6.5、7.5)'はどうでしょうか? – Stibu

+0

それはうまくいきましたが、私の質問はなぜですか? – etaylor

答えて

1

コメントで指摘したように、as.numeric(y)を使用するとうまくいきます。

これがなぜ起こっているのかについては、pcrのコードis available on githubを調べる必要があります。

pcr入力には、マトリックスまたはデータフレーム(正確には「2次元以上の配列」)を入力する必要があります。入力はcolMeansです。そこに到達するために、それはこのように入力をチェックします。

if (is.vector(x)) 
     x = as.data.frame(x) 

を残念ながら、na.omitで追加された追加の属性で、(あなたは、構造の出力で見ることができます:- attr(*, "na.action")=Class 'omit')を、is.vector()はもはや真実ではありません:

is.vector(na.omit(c(1, NA, 2))) 
# [1] FALSE 

我々は?vectorを見れば、我々はこれを見つけることができます:

is.vector戻りTRUE場合xは、以外の属性を持たない指定されたモードのベクトルです。それ以外の場合はFALSEを返します。

したがって、is.vectorは、少なくとも文書化されているように動作します。したがって、na.omit()行の後に、入力をas.numeric()またはas.vector()と入力して「真のベクトル」に戻す必要があります。

?na.omit助けにも属性を追加言及:na.omitはケースを削除する場合

、例行番号は、クラス"omit"の結果の"na.action"属性を、形成します。文書化されているように振る舞うbase機能付き

、これはおそらくpcrのバグと考えられます。 is.vector(x)をテストするのではなく、恐らくそれはおそらくif (length(dim(x) < 2) x = as.data.frame(x)という次元を直接テストするべきです。

+0

非常に高く評価されました – etaylor

関連する問題