That's because you are passing the argument twice. Try this:
+ {
+ L <- list(...)
+ if (is.null(L$decreasing)) L$decreasing <- TRUE
+ do.call(order, c(list(x), L))
+ }
foo1(c(5, 2, 3, 4), decreasing=FALSE)
On 7/1/06, Gregor Gorjanc <gregor.gorjanc at gmail.com> wrote:
Hi,
Gabor Grothendieck wrote:
f <- function(...) if (!is.null(list(...)$arg1)) cat("arg1 found\n")
else cat("arg1 not found\n")
f(arg1 = 3)
Actually it is not OK. Bellow is simplified example that shows, what I
would like to do:
foo1 <- function(x, ...)
{
if(is.null(list(...)$decreasing)) {
decreasing <- TRUE
} else {
decreasing <- list(...)$decreasing
}
return(order(x, ..., decreasing=decreasing))
}
foo1(c(5, 2, 3, 4), decreasing=FALSE)
Error in order(x, ..., decreasing = decreasing) :
formal argument "decreasing" matched by multiple actual arguments
On 7/1/06, Gregor Gorjanc <gregor.gorjanc at gmail.com> wrote:
Hello!
Say I have a function foo1, which has argument ... to pass various
arguments to foo2 i.e.
foo1 <- function(x, ...)
{
foo2(x, ...)
}
Say that foo2 accepts argument arg1 and I would like to do the
- if foo1 is called as foo1(x) then I would like to assign some
arg1 inside foo1 before calling foo2
arg1 <- "some value"
foo2(x, arg1=arg1)
- if foo1 is called foo1(arg1="some other value") do not assign some
value to arg1 and call foo2
foo2(arg1=arg1)
However, I am not able to do this since I do not know how to
if arg1 was given in foo1. Is it possible to test whether some
was passed in "..." i.e. something like
foo1 <- function(x, ...)
{
if(testForArgumentInThreeDots(arg1)) arg1 <- "some value"
foo2(x, arg1=arg1, ...)
}
Thanks!