?s 17:11 de 11/12/2022, akshay kulkarni escreveu:> Dear members, > I am a stock trader and using R for my research. I am monitoring stock prices in real time. I have the following code: > >> if (sock price q, breaches a certain value Q) { expr1; expr2; expr3} > > THe point is, expr1,expr2,expr3 should execute only once, i.e when q breaches Q. I thought of something like this: > >> if( q >= Q ) { expr1; expr2; expr3;} > > But expressions keep repeating as long as q >= Q, NOT when q breaches Q for the first time. I did some research on myself and came up with this: > >> f <- function() {expr1; expr2; expr3; j <<- j + 1} >> j <- 1; counter[[j]] <- 1; >> if ((q >= Q) && length(counter) == 1) {f} > > I just want your help to know whether it is logically right or not. ARe not there any other possibility other than using the superassignment operator? > > Also, any way how to remember when the real time price q, breaches a value Q, for the first time ( the price may come back to Q again afterwards) ? > > THanking you, > Yours sincerely, > AKSHAY M KULKARNI > > [[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.Hello, Use environments. You will assign to a variable living in a special place, protected from the rest of the code, that you can access any time you want. Something like the following. f <- function(envir) {expr1; expr2; expr3; envir$j <- envir$j + 1L} e <- new.env() e$j <- 1L # do you need counter for something else? # if not delete these two lines counter <- list() counter[[e$j]] <- 1L # this seems to be all you need, not counter if ((q >= Q) && e$j == 1L) {f(e)} Hope this helps, Rui Barradas
?s 17:28 de 11/12/2022, Rui Barradas escreveu:> ?s 17:11 de 11/12/2022, akshay kulkarni escreveu: >> Dear members, >> ???????????????????????????? I am a stock trader and using R for my >> research. I am monitoring stock prices in real time. I have the >> following code: >> >>> if (sock price q, breaches a certain value Q) { expr1; expr2; expr3} >> >> THe point is, expr1,expr2,expr3 should execute only once, i.e when q >> breaches Q. I thought of something like this: >> >>> if( q >= Q ) { expr1; expr2; expr3;} >> >> But expressions keep repeating as long as q >= Q, NOT when q breaches >> Q for the first time. I did some research on myself and came up with >> this: >> >>> f <- function() {expr1; expr2; expr3; j <<- j + 1} >>> j <- 1; counter[[j]] <- 1; >>> if ((q >= Q)? && length(counter) == 1) {f} >> >> I just want your help to know whether it is logically right or not. >> ARe not there any other possibility other than using the >> superassignment operator? >> >> Also, any way how to remember when the real time price q, breaches a >> value Q, for the first time ( the price may come back to Q again >> afterwards) ? >> >> THanking you, >> Yours sincerely, >> AKSHAY M KULKARNI >> >> ????[[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. > Hello, > > Use environments. You will assign to a variable living in a special > place, protected from the rest of the code, that you can access any time > you want. > Something like the following. > > > > f <- function(envir) {expr1; expr2; expr3; envir$j <- envir$j + 1L} > > e <- new.env() > e$j <- 1L > # do you need counter for something else? > # if not delete these two lines > counter <- list() > counter[[e$j]] <- 1L > # this seems to be all you need, not counter > if ((q >= Q)? && e$j == 1L) {f(e)} > > > > Hope this helps, > > Rui Barradas > > ______________________________________________ > 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.Hello, Or with a counter. f <- function(envir) { envir$counter <- envir$counter + 1L x <- pi x } q <- 10 Q <- 5 e <- new.env() e$counter <- 0L # if ((q >= Q) && e$counter == 0L) { print(f(e)) } #> [1] 3.141593 if ((q >= Q) && e$counter == 0L) { print(f(e)) } else message("it worked!") #> it worked! Hope this helps, Rui Barradas
Dear Rui, Thanks for your reply....your reply covers the first part of my question. What about the second part? i.e remembering the state when the price q breaches Q? Will some thing like this work: f <- function(envir) {expr1; expr2; expr3; envir$j <- envir$j + 1L} e <- new.env() e$j <- 1L # do you need counter for something else? # if not delete these two lines counter <- list() counter[[e$j]] <- 1L # this seems to be all you need, not counter if ((q >= Q) && e$j == 1L) {f(e); C1 <- "the price Q has been breached!"} if(C1 != "the price Q has been breached!") { do something } ANy other method? Thanking you, Yours sincerely, AKSHAY M KULKARNI ________________________________ From: Rui Barradas <ruipbarradas at sapo.pt> Sent: Sunday, December 11, 2022 10:58 PM To: akshay kulkarni <akshay_e4 at hotmail.com>; R help Mailing list <r-help at r-project.org> Subject: Re: [R] remembering the state of an action in R.... ?s 17:11 de 11/12/2022, akshay kulkarni escreveu:> Dear members, > I am a stock trader and using R for my research. I am monitoring stock prices in real time. I have the following code: > >> if (sock price q, breaches a certain value Q) { expr1; expr2; expr3} > > THe point is, expr1,expr2,expr3 should execute only once, i.e when q breaches Q. I thought of something like this: > >> if( q >= Q ) { expr1; expr2; expr3;} > > But expressions keep repeating as long as q >= Q, NOT when q breaches Q for the first time. I did some research on myself and came up with this: > >> f <- function() {expr1; expr2; expr3; j <<- j + 1} >> j <- 1; counter[[j]] <- 1; >> if ((q >= Q) && length(counter) == 1) {f} > > I just want your help to know whether it is logically right or not. ARe not there any other possibility other than using the superassignment operator? > > Also, any way how to remember when the real time price q, breaches a value Q, for the first time ( the price may come back to Q again afterwards) ? > > THanking you, > Yours sincerely, > AKSHAY M KULKARNI > > [[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.Hello, Use environments. You will assign to a variable living in a special place, protected from the rest of the code, that you can access any time you want. Something like the following. f <- function(envir) {expr1; expr2; expr3; envir$j <- envir$j + 1L} e <- new.env() e$j <- 1L # do you need counter for something else? # if not delete these two lines counter <- list() counter[[e$j]] <- 1L # this seems to be all you need, not counter if ((q >= Q) && e$j == 1L) {f(e)} Hope this helps, Rui Barradas [[alternative HTML version deleted]]