Schedule Append Data Frame

Hi,

I want to create a dataframe running a code every 30 seconds.

get_lokasyon() gives me a data frame. I want to query with get_lokasyon() every 30 seconds and add the results one after another but df_total gives me only last running get_lokasyon()

library(tcltk)

df_total = data.frame()
run <- function () { 
  .id <<- tcl("after", 30000, run) # after 30000 ms execute run() again
  
      df <- get_lokasyon()
    df_total <- rbind(df_total,df)
  print(df_total)
}

run()

Example result of get_lokasyon():

Operator Garaj KapiNo Saat Boylam Enlem
1 OHO AA 16:24:51 29.037663 41.12744

After 90 seconds I want:

Operator Garaj KapiNo Saat Boylam Enlem
1 OHO AA 16:24:51 29.037663 41.12744
2 OHO AA 16:25:40 29.037663 41.12744
3 OHO AA 16:26:10 29.037663 41.12744

Thank you

Hi,

The reason this is not working is because there is no loop in your function. If you like to get the results multiple times you need to specify a for-loop or while-loop.

The function tcl() might trigger ever x seconds, but this would not trigger the rest of the function around it again unless you are in a reactive environment like Shiny.

Here is an example how you could implement this

myData = data.frame()

for(x in 1:3){
  
  print(paste("Start round", x))
  newData = data.frame(x = x , time = Sys.time(), val = runif(1))
  myData = rbind(myData, newData)
  Sys.sleep(3)
  
}
#> [1] "Start round 1"
#> [1] "Start round 2"
#> [1] "Start round 3"

myData
#>   x                time       val
#> 1 1 2021-02-07 09:19:25 0.8187054
#> 2 2 2021-02-07 09:19:28 0.3396553
#> 3 3 2021-02-07 09:19:31 0.1789086

Created on 2021-02-07 by the reprex package (v1.0.0)

In your case, do not set the timer within the function, but use the system sleep to wait before you run the next iteration.

Hope this helps,
PJ

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.