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
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.
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]]