2017-07-25 7 views
0

ddplyを使用してdata.frameの一部を要約すると、数値データになる式だけが含まれていても問題ありません。しかし、数値データと文字データの両方を含む式を含めると、すべての出力列が文字になります。私は決して予測せず、実際にコードを下流に掘り下げてしまいました。このことから数値から文字へのPlyrの変更

library(plyr) 
set.seed(1234) 
data <- data.frame(x = 1:25, 
        y = c((1:25)*4 + rnorm(100, mean = 0, sd = 50), 
         (1:25)*4 + rnorm(100, mean = 0, sd = 1000)), 
        category = c(rep("stuff with a stronger correlation", 100), 
           rep("stuff with a weaker correlation", 100))) 

lmresults <- ddply(data, "category", function(df) c(
     slope = coef(lm(df$y ~ df$x))[2], 
     pval = signif(summary(lm(df$y ~ df$x))$coef[2, "Pr(>|t|)"], 2) 
)) 
str(lmresults) 

出力:「傾き」と「PVAL」の両方の数値であることを

'data.frame': 2 obs. of 3 variables: 
$ category : Factor w/ 2 levels "stuff with a stronger correlation",..: 1 2 
$ slope.df$x: num 4.15 12.31 
$ pval  : num 3.7e-09 3.7e-01  

注ここで私が話しているかの再現性の例です。私がしなければしかし、この:

lmresults2 <- ddply(data, "category", function(df) c(
     pval = signif(summary(lm(df$y ~ df$x))$coef[2, "Pr(>|t|)"], 2), 
     slope = paste("slope =", signif(coef(lm(df$y ~ df$x))[2], 2)) 
)) 
str(lmresults2) 

出力は次のようになります。

'data.frame': 2 obs. of 3 variables: 
$ category: Factor w/ 2 levels "stuff with a stronger correlation",..: 1 2 
$ pval : chr "3.7e-09" "0.37" 
$ slope : chr "slope = 4.1" "slope = 12" 

私は文字であることをslopeを期待していたが、突然pvalも、キャラクターです!

これはバグのプライヤーにありますか?それはすべてのデータに同じクラスを持たなければならないマトリックスに出力を変換していますか?しかし、その場合、なぜオブジェクトのクラスlmresults2はまだ "data.frame"ですか?

+2

plyr!= dplyr;これは元のように見えます。 – alistaire

答えて

2

いいえ、バグではありません。あなたの匿名機能にc()を使用しているからです。 help(c)によると:出力タイプがから決定される

すべての引数が返された値の型である一般的なタイプに強制変換され、

を...階層内のコンポーネントの最も高いタイプNULL <未加工<論理<整数<ダブル<複合<文字<リスト<式。

最初の匿名関数は、両方の数値が結果となる2つの呼び出しを連結するため、問題はありません。しかし、2番目の無名関数は、で作成された数値とpaste()で作成された文字を連結し、文字結果を返します。

おそらくの代わりにdata.frame(pval = ..., slope = ...)が必要です。何が起こっているのかを簡単に見るために、c(1, "a")の結果を見てください。それは数字か文字ですか?

+0

@LauraS 'data.frame(pval = ...、slope = ...)'を 'ddply'として使うと、data.frameが出力として期待されます。 'list'はエラーを返します。 – CPak

+0

ありがとう@ChiPak。私は頻繁にplyrを使用しません。 –

+0

いいえ...... – CPak

関連する問題