Calling a procedure
Hi Steven: Rui's detailed explanation was great. The way I think of it is, if you don't want to send the variables in with the same order as the formal arguments, then you better name them as you send them in.
On Sun, Sep 20, 2020 at 7:23 AM Steven Yen <styen at ntu.edu.tw> wrote:
Thanks. So, to be safe, always a good idea to give the argument, e.g., q=1.96, log.p=FALSE, skipping mean=0 and sd=1 if not needed. Thanks. pnorm(q=1.96, log.p = FALSE) On 2020/9/20 ?? 06:36, Rui Barradas wrote:
Hello,
You are making a confusion between
1. the formal argument log.p
2. the variable log.p
In the function body, log.p is a variable that exists in the
function's frame, not the formal argument of pnorm.
The first and the 3rd calls that follow output the same value.
try(x = 1.2, log.p = TRUE)$a
try(x = 1.2, log.p = TRUE)$b
try(x = 1.2, 1)$a
This is because in the function
a<-pnorm(x,log.p) # first call
passes log.p as the *second* argument, not as a value for pnorm's
formal argument log.p. Unless when named, the arguments are passed in
the order they appear in the function's definition:
pnorm(q, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE)
and that becomes
a<-pnorm(x,TRUE) # first call
a<-pnorm(x,1) # first call, coerced to numeric.
Let me give another example. In the function that follows the default
is z = FALSE.
In the first call the name z is not the name of the argument, it's the
name of a variable that exists in the .GlobalEnv.
In the second call, z = z assign the formal argument z the value of
the variable z.
f <- function(x, y = 0, z = FALSE){
a <- x
b <- y
d <- z
list(a = a, b = b, d = d)
}
z <- 2
f(1, z)
f(1, z = z)
Hope this helps,
Rui Barradas
?s 11:11 de 20/09/20, Steven Yen escreveu:
Can someone tell me a proper call to a procedure, in this case,
pnorm. In what follows, I had expected a = b, but they are not equal.
What are wrong with first call and second call? Thank you!
try<-function(x,log.p=FALSE){
a<-pnorm(x,log.p) # first call
b<-pnorm(x,log.p=log.p) # second call
list(a=a,b=b)
}
try(x=1.2,log.p=TRUE)$a
try(x=1.2,log.p=TRUE)$b
______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
[[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.