&引用;“形式论证”;"富",;由多个参数匹配";-如何在R中处理这个问题?
有时,使用某些参数调用函数会导致错误消息&引用;“形式论证”;"富",;由多个参数匹配";-如何在R中处理这个问题?,r,function,plot,arguments,R,Function,Plot,Arguments,有时,使用某些参数调用函数会导致错误消息形式参数“foo”与多个实际参数匹配。可以打印不明确的实际参数列表吗 我问这个问题的原因是当前类mixEM对象的plot函数存在问题(由mixtools包中的normalmixEM生成)。它不接受产生上述错误的参数ylim,但当我尝试使用ylim2(它对xlab2,main2,col2等的工作方式)时,它会说“ylim2”不是一个图形参数。所以我想知道与ylim匹配的实际参数是什么 使用formals(plot.mixEM)没有帮助,因为它不包含任何以yl
形式参数“foo”与多个实际参数匹配
。可以打印不明确的实际参数列表吗
我问这个问题的原因是当前类mixEM
对象的plot
函数存在问题(由mixtools
包中的normalmixEM
生成)。它不接受产生上述错误的参数ylim
,但当我尝试使用ylim2
(它对xlab2
,main2
,col2
等的工作方式)时,它会说“ylim2”不是一个图形参数。所以我想知道与ylim
匹配的实际参数是什么
使用formals(plot.mixEM)
没有帮助,因为它不包含任何以ylim
开头的内容,但最后它引用了…
,这是传递给plot
的图形参数。但是,对于plot
函数,ylim
将是明确的。从R
中获得更精确的错误描述,并列出冲突的参数,这会很有帮助
UPD:MWE:
library(mixtools)
wait = faithful$waiting
mixmdl = normalmixEM(wait)
plot(mixmdl, which = 2, xlim = c(25, 110), nclass=20)
lines(density(wait), lty = 2, lwd = 2)
这会产生一个错误:
plot(mixmdl, which = 2, xlim = c(25, 110), ylim = c(0, .5), nclass=20)
# Error in hist.default(x, prob = TRUE, main = main2, xlab = xlab2, ylim = c(0, :
# formal argument "ylim" matched by multiple actual arguments`
这根本不起作用:
plot(mixmdl, which = 2, xlim = c(25, 110), ylim2 = c(0, .5), nclass=20)
# Warning messages:
# 1: In title(main = main, sub = sub, xlab = xlab, ylab = ylab, ...) :
# "ylim2" is not a graphical parameter
# 2: In axis(1, ...) : "ylim2" is not a graphical parameter
# 3: In axis(2, ...) : "ylim2" is not a graphical parameter
错误消息提供了大量信息。它告诉您哪个函数两次传递参数。有关更多信息:
traceback()
# 4: hist.default(x, prob = TRUE, main = main2, xlab = xlab2, ylim = c(0,
# maxy), ...)
# 3: hist(x, prob = TRUE, main = main2, xlab = xlab2, ylim = c(0,
# maxy), ...)
# 2: plot.mixEM(mixmdl, which = 2, xlim = c(25, 110), ylim = c(0,
# 0.5), nclass = 20)
# 1: plot(mixmdl, which = 2, xlim = c(25, 110), ylim = c(0, 0.5),
# nclass = 20)
因此,在plot.mixEM
中调用了hist
,它已经设置了ylim=c(0,maxy)
。您的ylim=c(0,0.5)
通过省略号(…
)传递,因此hist.default
传递ylim
两次。因此,错误。您的问题本质上属于以下类型:
plot(1:10, rnorm(10), ylim=c(0,1), ylim=c(-1,100))
Error in plot.default(1:10, rnorm(10), ylim = c(0, 1), ylim = c(-1, 100)) :
formal argument "ylim" matched by multiple actual arguments
因为在plot.mixEM的下一行中,您的ylim定义被传递给带有“…”参数的plot函数:
而ylim的定义具有以下上限:
maxy <- max(max(a$density), 0.3989 * mix.object$lambda/mix.object$sigma)
添加产生错误的代码比叙述方式更容易…@agstudy我添加了一个MWE。但是,我也希望能就如何处理此类错误提供一般性建议,因为这不是我第一次也可能不是最后一次遇到此类问题。仅供参考-如果您在函数调用中意外添加参数两次,也可能会发生此错误。好的,谢谢。但是为什么调用中的ylim
不覆盖plot.mixEM
设置的默认值呢?我怎样才能改变它?因为椭圆。定义自己的绘图功能(从plot.mixEM
复制代码,并从对hist
的错误调用中删除ylim=c(0,maxy)
)。谢谢,我想我已经找到了!
hist(x, prob = TRUE, main = main2, xlab = xlab2, ylim = c(0, maxy), ...)
maxy <- max(max(a$density), 0.3989 * mix.object$lambda/mix.object$sigma)
library(mixtools)
wait = faithful$waiting
mixmdl = normalmixEM(wait)
plot.new()
plot.window(xlim=c(25,110), ylim=c(0,0.5))
plot(mixmdl, which = 2, nclass=20, add = TRUE)
lines(density(wait), lty = 2, lwd = 2)
box(); axis(1); axis(2); title(xlab="Data", ylab="Density")