gpt4 book ai didi

r - mapply() 中 MoreArgs 的奇怪之处 - 传递一个参数的多个值

转载 作者:行者123 更新时间:2023-12-02 05:43:10 25 4
gpt4 key购买 nike

昨天,我问了一个question关于如何在不使用循环的情况下绘制多条(水平)线,每条线都具有用户指定的颜色。

我尝试使用建议的函数 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))

Plot 1: Desired plot

这一切都很好。但是,我试图将此代码包装在一个函数中,并且我希望能够输入一个可选参数列表,然后可以将其传递给 mapply/matlines。我试图在 mapply() 中使用参数 MoreArgs 无济于事。似乎 MoreArgs 采取的论点与其他论点不同。正如您在第一个代码中看到的,列表中的每个项目都有不同的颜色,但是当我将 col 放入列表 args.ci 中时,这 3 种颜色在列表的每个项目中循环使用。我想知道是否有办法解决这个问题,这样如果我有一个参数的多个值,每个值都会应用于列表中的一个项目。谢谢!

    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))

Plot 2: Not what I want

最佳答案

下面是解决此类问题的一般方法。您应该能够调整它以更准确地执行您想要的操作:

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)

enter image description here

关于r - mapply() 中 MoreArgs 的奇怪之处 - 传递一个参数的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10676553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com