[R] How to vectorize this function
Bert Gunter
bgunter@4567 @end|ng |rom gm@||@com
Thu Sep 20 18:42:42 CEST 2018
Also:
What package does polya() come from and "gamma" (as a numeric value)is
undefined (it is a function).
Bert Gunter
"The trouble with having an open mind is that people keep coming along and
sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
On Thu, Sep 20, 2018 at 9:06 AM David L Carlson <dcarlson using tamu.edu> wrote:
> Your function takes an argument "F" that is never used and uses an object
> "y" which is not defined. Give us some data to use for testing different
> approaches along with the answer you expect. It may be possible to use two
> ifelse() functions instead of the loop.
>
> ----------------------------------------
> David L Carlson
> Department of Anthropology
> Texas A&M University
> College Station, TX 77843-4352
>
> -----Original Message-----
> From: R-help <r-help-bounces using r-project.org> On Behalf Of Lynette Chang
> Sent: Thursday, September 20, 2018 10:09 AM
> To: r-help using r-project.org
> Subject: [R] How to vectorize this function
>
> Hello everyone,
>
> I’ve a function with five input argument and one output number.
> impVolC <- function(callM, K, T, F, r)
>
> I hope this function can take five vectors as input, then return one
> vector as output. My vectorization ran into problems with the nested
> if-else operation. As a result, I have to write another for loop to call
> this function. Can anyone suggest some methods to overcome it? I put my
> code below, thanks.
>
> impVolC <- function(callM, K, T, F, r){
>
>
> if(y >= 0){
> call0 <- K*exp(-r*T)*(exp(y)*polya(sqrt(2*y)) - 0.5)
> if(callM <= call0){
> sig <- 1/sqrt(T)*(sqrt(gamma + y) - sqrt(gamma - y))
> }else{
> sig <- 1/sqrt(T)*(sqrt(gamma + y) + sqrt(gamma - y))
> }
> }else{
> call0 <- K*exp(-r*T)*(exp(y)/2 - polya(-sqrt(-2*y)))
> if(callM <= call0){
> sig <- 1/sqrt(T)*(-sqrt(gamma + y) + sqrt(gamma - y))
> }else{
> sig <- 1/sqrt(T)*(sqrt(gamma + y) + sqrt(gamma - y))
> }
> }
> sig
> }
>
> for(i in 1:length(call)){
> sigV[i] <- impVolC(callM = call[i], K = df$Strike[i], T = T, F = F, r =
> r_m) }
>
> ______________________________________________
> R-help using 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.
> ______________________________________________
> R-help using 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]]
More information about the R-help
mailing list