2017-01-07 12 views
1

私は、Johnsonパッケージの関数RE.Johnsonを、16個の変数の157個の観測値を含む全体のデータフレームdfに適用しようとしています。これを行う代わりにすべてのデータフレームをループしたい手動で 次のコードを試しましたが、動作しません。データフレームにループを適用する

lapply(df[1:16], function(x) RE.Johnson(x)) 

は、私はそれがあなたたちのために簡単に見えるかもしれません知っているが、私はジュスト おかげ

EDIT

Rは私に答えError in RE.ADT(xsl[, i]) : object 'p' not foundを提供し、データが変換されていませんR.始まりますよ。

data.frame': 157 obs. of 16 variables: 
$ X   : num 786988 781045 777589 775266 786843 ... 
$ Y   : num 486608 488691 490089 489293 488068 ... 
$ Z   : num 182 128 191 80 131 ... 
$ pH  : num 7.93 7.69 7.49 7.66 7.92 7.08 7.24 7.19 7.44 7.37 ... 
$ CE  : num 0.775 3.284 3.745 4.072 0.95 ... 
$ Nitrate : int 21 14 18 83 30 42 47 101 85 15 ... 
$ NP  : num 19.6 43.6 31.7 18.6 31.7 ... 
$ Cl  : num 1.9 21.3 2.56 21.5 3.2 ... 
$ HCO3  : num 6.65 4.85 4.4 7.72 4.1 ... 
$ CO3  : num 0 0 0 0 0.0736 ... 
$ Ca  : num 4.12 7.52 3.48 7.58 4.8 10 4.4 4.6 4.2 7.4 ... 
$ Mg  : num 3.94 8.92 2.34 7.1 2.5 ... 
$ K   : num 0.1442 0.0759 0.0709 0.3691 0.07 ... 
$ Na  : num 2.41 34.55 2.51 44.01 2.1 ... 
$ SO4  : num 1.45 23.6 1.2 26.66 2 ... 
$ Residu_sec: num 0.496 2.102 2.397 2.606 0.608 ... 
+2

これはあいまいです:

require(Johnson) x = rep(1,n=100) RE.ADT(x) 

だから、この問題を解決するためにあなたは、関数RE.Johnson内部のIFセッションでそれを確認することができます:あなたがこれを行う場合は、エラーになります」しかしそれはうまくいかない」さらに説明してください。エラーはありますか?出力は期待されるものと異なっていますか? StackOverflowへようこそ。この記事を読むには、[素晴らしいRの例を提供する方法](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)とどのように[最小限の、完全で検証可能な例を提供する](http://stackoverflow.com/help/mcve)、それに応じてあなたの質問を修正してください。これらのヒント[良い質問をする方法](http:// stackoverflow。com/help/how-to-ask)も役に立つかもしれません。 – lmo

+0

データのサンプルとエラーが表示された場合は、より簡単に対応できます。 – PereG

+0

コンソールで 'dput(head(df、20))'とタイプし、結果がここに貼り付けられ、入力がデータフレームで操作が列tryの場合は、 –

答えて

1

ない他の人のための完全なソリューション、ちょうどいくつかの情報: そして、ここでは、データの要約です。

irisデータフレームの列で手動でJohnson::RE.Johnsonを試しました。

lapply(iris[c(1,3)], Johnson::RE.Johnson) 

...、それはあなたがSepal.WidthPetal.Widthについて述べたエラーを返します:Sepal.LengthだけPetal.Lengthための作業罰金のようです。

lapply(iris[c(2,4)], Johnson::RE.Johnson) 

Error in RE.ADT(xsl[, i]) : object 'p' not found 

これらの列のデータ型がすべてnumであるため、これは奇妙に思えます。 irisデータフレームには、欠けている値や余分な文字の値がどこにも隠されていないように見えるので、なぜこれらの列で計算が機能しているのかわからないのです。

Johnson::RE.Johnsonがデータに対して何をしているかをあまり理解していないと、pの値を計算できず、それらの列の繰り返しを完了できないようです。

ソースコードを探索から、この関数は、この時点で打破するために表示されます。

if (xsb.valida[1, i] == 0) 
    xsb.adtest[1, i] <- (Johnson::RE.ADT(xsb[, i])$p) # succeeds 
    if (xsl.valida[1, i] == 0) 
    xsl.adtest[1, i] <- (Johnson::RE.ADT(xsl[, i])$p) # fails 
    if (xsu.valida[1, i] == 0) 
    xsu.adtest[1, i] <- (Johnson::RE.ADT(xsu[, i])$p) # fails 

機能は、この時点でちょうど0のベクトルである、XSLでJohnson::RE.ADTを実行しようとします。 RE.ADTは、p値が見つからない同じエラーを返します。

+0

はい、私のデータのために同じテストを実行しましたが、いくつかの列には問題がありますが、他の列は問題ありません...理由はわかりません –

+0

あなたのためのソースコードでいくつかの探索作業を行いました。うまくいけば、誰かが何が起こっているのかを知るのに十分なのです。 –

0

関数は、Anderson-Darlingテストを等価値のベクトルに実行しようとするときに問題になります。

if (xsb.valida[1, i] == 0 & any(xsb[, i]!=xsb[1, i])){ 
     xsb.adtest[1, i] <- (RE.ADT(xsb[, i])$p) 
    }else{ 
     xsb.adtest[1, i] <- 0 
    } 
    if (xsl.valida[1, i] == 0 & any(xsl[, i]!=xsl[1, i])) { 
     xsl.adtest[1, i] <- (RE.ADT(xsl[, i])$p) 
    }else{ 
     xsl.adtest[1, i] <- 0 
    } 
    if (xsu.valida[1, i] == 0 & any(xsu[, i]!=xsu[1, i])) { 
     xsu.adtest[1, i] <- (RE.ADT(xsu[, i])$p) 
    }else{ 
     xsu.adtest[1, i] <- 0 
    } 
関連する問題