2017-06-18 9 views
0

問題があります。私が持っていることは次のとおりです。私が欲しいものエラー:分位関数によるデータフレームの受け渡し

dec_amt <- function(x, k) format(round(x, k), nsmall=k)  # Formatting decimal places 

example.df <- data.frame(replicate(8,sample(0:100000,1000,rep=TRUE))) 
names(example.df) <- c("AF", "CD", "CS", "ED", "LP", "PI", "RR", "TD") 

probTab_test2 <- function(x = c(...), y=c(...), z=c(...)) 

{ 
    m.TABLE <- list() 
    EXP <- list() 
    PROB <- c(seq(.10, .90, .10), seq(.91,.99,.01), seq(.995, .999, .001)) 
    PERIOD <- dec_amt(1/(1-PROB), 2) 

    for (i in 1:(length(z))) { 

    if (length(z) == 1) 
    { 
     break 
    } 

    EXP <- quantile(example.df[,z[i]], PROB) 
    EXP <- formatC(EXP, format='d', big.mark=',') 
    m.TABLE <- list(data.frame(PERIOD, EXP)) 

    print(m.TABLE) 
    } 

    EXP <- quantile(example.df[,z], PROB) 
    EXP <- formatC(EXP, format='d', big.mark=',') 

    TABLE <- data.frame(PERIOD, EXP) 

    return(TABLE) 
} 

probTab_test2(c("Consumer Products"), c("All Revenues"),c("TD", "LP")) 

Error in `[.data.frame`(x, order(x, na.last = na.last, decreasing = decreasing)) : 
    undefined columns selected 

は、引数zの長さは、zのすべての要素のために、その後> 1であれば、私はそれは私がにバインドできる「EXP」列を作成したい、ですdataframe(m.TABLEと定義されています)ので、最後には、z個のデータフレームのリストがあります。

私はquantile関数がベクトルの代わりにデータフレームを通過するのはうれしくないが、このループでそれを回避する方法はわからないと思う。提案はすばらしいことになり、さらに詳しい情報を提供することができます。

注 - x、y引数は無視してください。これらの引数は外部関数を呼び出すために使用されますが、この問題では特に注意してください。

+0

'quantile()'はデータフレーム用ではありません。 'library(" fortunes ");運勢(85) ' – jogo

+0

この問題の回避方法はありますか?どういうわけか、example.dfの問題から 'z'列の指定された各要素をベクトルとして抽出し、 'quantile()'に渡すことはできますか?今、私はデータフレームとしてそれをつかんでいます。 – S31

答えて

1

あなたはZに列挙された変数をループにlapply機能を利用し、コードを簡略化することができる:Zにリストされた各変数について

probTab_test2 <- function(x = c(...), y=c(...), z=c(...)) { 
    PROB <- c(seq(.10, .90, .10), seq(.91,.99,.01), seq(.995, .999, .001)) 
    PERIOD <- dec_amt(1/(1-PROB), 2) 
    m.TABLE <- lapply(as.data.frame(example.df[, z]), function (vector) { 
     quantiles <- quantile(vector, PROB) 
     formatted.quantiles <- formatC(EXP, quantiles, format='d', big.mark=',') 
     return(data.frame(PROB, formatted.quantiles)) 
    }) 
    return(m.TABLE) 
} 

を、この機能は、変位値を計算し、のためのデータフレームを作成します各変数はzにリストされています。 length(z)==1であってもlapplyが動作するように、as.data.frameが必要です。

関連する問題