R:为什么.call情节带有y值

时间:2013-11-26 02:19:44

标签: r plot

我在构建函数时使用do.call。但我遇到了这样的问题:

z<-sample(1:3, 100, T)
y<-rnorm(100)
plot.list <- c(list(x=z,y=y))
do.call(plot, plot.list)

为什么情节包含了y值?

谢谢!

2 个答案:

答案 0 :(得分:1)

这是因为如果plot.defaultxy

xlab会尝试为ylabNULL创建合理的标签

使用

deparse(substitute(y))

然而,使用do.call,列表已创建,并且称为y的变量被其内容替换,因此此方法使用整个变量呈现标签

foo <- function(y) deparse(substitute(y))
> do.call(foo, list(y=y))
 [1] "c(1.19006018249756, -0.50627079218304, -0.103312348822805, 0.395028889714542, " 
 [2] "1.25258077222837, 2.63766225444435, 0.260296813253391, 0.280839960496168, "     
 [3] "-1.47428483557887, -0.585934600873922, 0.879979238185618, -0.0871689899965067, "
 ..... <truncated>

明确设置xlabylab即可。

do.call(plot, list(x=z,y=y, xlab = "x",ylab="y"))

答案 1 :(得分:1)

要使用do.call,您需要将zy作为名称,以便不会提前进行评估。

do.call("plot", list(x=as.name("z"), y=as.name("y")))

但是,如果您将xlabylab明确设置为@mnel建议,那么代码肯定会更清楚。