2016-07-04 18 views
-3

なぜ私のコードが正しく動作しないのですか?引数hist.args = NULL、plot.args = NULLを関数のプロットとhistのplot.gevp関数に正しく渡すにはどうしたらいいですか?汎用関数プロットの引数を変更するにはどうすればよいですか?

plot.gevp=function (vector, type = c("predictive", "retlevel"), t, hist.args = NULL, plot.args = NULL){ 
     if (type=="predictive"){ 
     dat=vector$data 
     linf = max(min(dat) - 1, 0) 
     lsup = 11 * max(dat)/10 
     x = seq(linf, lsup, (lsup - linf)/70) 
     n = length(x) 
     int = length(vector$posterior[, 1]) 
     res = array(0, c(n)) 
     for (i in 1:n) { 
      for (j in 1:int) { 
       if ((vector$posterior[j, 3] > 0) && (x[i] > (vector$posterior[j, 1] - 
        vector$posterior[j, 2]/vector$posterior[j, 3]))) 
        res[i] = res[i] + (1/int) * dgev(x[i], vector$posterior[j, 
        3], vector$posterior[j, 1], vector$posterior[j, 2]) 
       if ((vector$posterior[j, 3] < 0) && (x[i] < (vector$posterior[j, 1] - 
        vector$posterior[j, 2]/vector$posterior[j, 3]))) 
        res[i] = res[i] + (1/int) * dgev(x[i], vector$posterior[j, 
        3], vector$posterior[j, 1], vector$posterior[j, 2]) 
      } 
     } 
     hist.args.all <- c(list(data, freq = F, ylim = c(min(res), max(res)), 
     main = NULL, xlab = "data", ylab = "density"), hist.args) 
     do.call("hist", hist.args.all) 

     lines(x, res) 
     out<-list(pred=res) 
     return(out) 
     } 

     if(type=="retlevel"){ 
     amostra = qgev(1 - 1/t, vector$posterior[, 3], vector$posterior[, 1], vector$posterior[, 2]) 
     res = quantile(amostra, 0.5) 

     t = seq(1, 100, 1) 
     n = length(t) 
     li = array(0, c(n)) 
     ls = array(0, c(n)) 
     pred = array(0, c(n)) 
     for (s in 1:n) { 
      amostra = qgev(1 - 1/s, vector$posterior[, 3], vector$posterior[, 1], vector$posterior[, 
       2]) 
      li[s] = quantile(amostra, 0.025) 
      ls[s] = quantile(amostra, 0.975) 
      pred[s] = quantile(amostra, 0.5) 
     } 
     plot.args.all <- c(list(t, pred, type = "l", ylim = c(li[2], max(ls)), 
     ylab = "returns"), plot.args) 
     do.call("plot", plot.args.all) 

     lines(t, li, lty = 2) 
     lines(t, ls, lty = 2) 
     out<-list(retmedian=res, retpred=pred) 

     return(out) 
     } 

    } 

私はのような関数を呼び出す:私はこの問題を解決するにはどうすればよい

Error in plot.gevp(p, "retlevel", t = 10, main = "list") : 
    unused argument (main = "list") 

:私はエラーを得た

plot(p,"retlevel",t=10, plot.args=list(main="list")) 

答えて

1

...構造体の使用はいかがですか?

plot.gevp=function (vector, data, type, t, ...) 
{ 
# rest of your code 
hist(data, freq = F, ylim = c(min(res), max(res)), main = NULL, 
    xlab = "data", ylab = "density", ...) 

plot(t, pred, type = "l", ylim = c(li[2], max(ls)), ylab = "returns", ...) 
} 

あなたはあなたの関数に渡すすべての更なる議論は、プロットとHISTにそのまま渡されます。

編集: 2つの異なる機能に渡すことを避けるために、やや複雑な例です。この場合、リスト内のすべての引数を渡す必要があります。

plot.gevp=function (vector, data, type, t, hist.args = NULL, plot.args = NULL) 
{ 
# rest of your code 
hist.args.all <- c(list(data, freq = F, ylim = c(min(res), max(res)), 
    main = NULL, xlab = "data", ylab = "density"), hist.args) 
do.call("hist", hist.args.all) 

plot.args.all <- c(list(t, pred, type = "l", ylim = c(li[2], max(ls)), 
    ylab = "returns"), plot.args) 
do.call("plot", plot.args.all) 
} 
+0

私は私のコードの最後にあなたの提案を入れて持っている、と私は例えば、私の関数を呼び出すために行くとき、 'プロットは(pは、nidd.annual、「予測」は、(= cをhist.args main = "Pred")) '?私はこれを試して、それが動作していないので。私はあなたの提案が好きで、私はこれを私のコードで使ってみたい@Choubi – user95060

+0

'hist.args.all < - c(list(data、freq = F、ylim = c(min(res)main = NULL、xlab = "data"、ylab = "density")、hist.args) do.call( "hist"、hist.args.all) hist(dat、 freq = F、ylim = c(min(res)、max(res))、main = NULL、 xlab = "data"、ylab = "density") lines(x、res) '? @Choubi – user95060

+0

'hist'への2回目の呼び出しは必要ありません。 'do.call(" hist "、hist.args.all)'は 'hist'への呼び出しです。 – Choubi

関連する問題