我正在尝试修改自定义函数内的点 (...)。这是我的一个简化示例plot2
函数,它在屏幕上显示一个绘图type="p"
(默认)并保存 svgtype="l"
。当其中之一出现时,问题就出现了...
绘图选项已在函数中。在这个例子中,"type"
由多个实际参数匹配。
plot2 <-function(...){
plot(...) #visible on screen
svg("c:/temp/out.svg") #saved to file
plot(...,type="l")
dev.off()
}
#This works
plot2(1:10)
#This does not work because type is redefined
plot2(1:10, type="o")
我试图把这些点放在一个list
在函数内部并修改它,但是plot
不接受列表作为输入。
#Does not work
plot2 <-function(...){
plot(...)
dots <<-list(...)
print(dots)
if("type" %in% names(dots)) dots$type="l"
print(dots)
svg("c:/temp/out.svg")
plot(dots)
dev.off()
}
plot2(1:10, type="o")
Error in xy.coords(x, y, xlabel, ylabel, log) :
'x' is a list, but does not have components 'x' and 'y'
如果您想转发修改后的版本...
,你需要做两件事:
-
Capture点
-
Forward捕获的点通过do.call https://stat.ethz.ch/R-manual/R-devel/library/base/html/do.call.html.
其工作原理如下:
plot2 = function (...) {
# capture:
dots = list(...)
# modify:
dots$type = 'l'
# forward call:
do.call(plot, dots)
}
一般来说,do.call(f, list(‹…›))
相当于f(‹…›)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)