&引用;“形式论证”;"富",;由多个参数匹配";-如何在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")