2

昨日、ループを使用せずに、それぞれがユーザー指定の色を持つ複数の (水平っぽい) 線をプロットする方法について質問しました。

提案された関数 matplot() を使用して、以下のプロットに示されている短い垂直線を関連するコードでプロットしようとしました。

    ci = matrix(1:30, nrow=3, byrow=T)
    ci=list(rbind(ci[1,], ci[1,]+2),
            rbind(ci[2,], ci[2,]+2),
            rbind(ci[3,], ci[3,]+2))
    x = rbind(1:10, 1:10)
    plot(-5, xlim=c(1,10), ylim=c(1,32)) 
    invisible(mapply(matlines, x=list(x), y=ci, 
              col=c("red","blue","black"), 
              lty = 1))

プロット 1: 目的のプロット

これはすべて良いです。ただし、このコードを関数内にラップしようとしています。オプションの引数のリストを入力して、mapply/matlines に渡すことができるようにしたいと考えています。mapply() で引数 MoreArgs を使用しようとしましたが、役に立ちませんでした。MoreArgs が取る引数は、他の引数と同じように扱われていないようです。最初のコードでわかるように、リストの各項目は異なる色になりますが、リスト args.ci 内に col を配置すると、3 つの色がリストの各項目内で再利用されます。引数に複数の値がある場合、各値がリストの1つの項目に適用されるように、この問題を解決する方法があるのではないかと思います。ありがとう!

    args.ci = list(col=c("red","blue","black"), lty=1:3)
    plot(-5, xlim=c(1,10), ylim=c(1,32)) 
    invisible(mapply(matlines, x=list(x), y=ci, 
              MoreArgs = args.ci))

プロット 2: 私が望むものではない

4

1 に答える 1

5

この種の問題に対する一般的なアプローチを次に示します。あなたが望むことをより正確に行うためにそれを適応させることができるはずです:

myFun <- function(...) {
    fixedArgs <- list(matlines, x=list(x), y=ci)
    dots <- list(...)
    allArgs <- c(fixedArgs, dots)
    plot(-5, xlim=c(1,10), ylim=c(1,32)) 
    invisible(do.call(mapply, allArgs))
}

myFun(col=c("red","blue","black"), lty=1)

ここに画像の説明を入力

于 2012-05-20T20:06:37.147 に答える