我正在使用 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
值?
谢谢!
最佳答案
发生这种情况是因为 plot.default
尝试为 x
和 y
创建合理的标签,如果 xlab
和 ylab
是NULL
使用
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>
显式设置 xlab
和 ylab
是正确的方法。
do.call(plot, list(x=z,y=y, xlab = "x",ylab="y"))
关于R:为什么 do.call 图带有 y 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20207355/