Ошибка при просмотре функции с помощью flow::flow_run()

#r

#r

Вопрос:

Проблема

Я пытаюсь просмотреть функцию, используя новый flow пакет, следующим образом:

Определение функции

 library(tibble)
calculate_decc <- function(initial_DV, 
                                 initial_frspacing, 
                                 standstill_frspacing,
                                 t, 
                                 nrows,
                                 LV_acc_mps2,
                                 den){
  
  D_first <- ((initial_DV)^2) / (den * (standstill_frspacing - initial_frspacing))   LV_acc_mps2[1]
  
  # D_reqd <- existing_decc   D_first
  
  
  
  DV <- vector(mode = "double", length = nrows)
  
  DV[1] <- initial_DV
  
  
  
  D <- vector(mode = "double", length = nrows)
  
  D[1] <- D_first
  
  
  
  Z <- vector(mode = "double", length = nrows)
  
  Z[1] <- initial_frspacing
  
  
  
  for (i in 2:nrows) {
    
    DV[i] <- DV[i-1]   ((D[i-1] - LV_acc_mps2[i-1]) * t)
    
    Z[i] <- Z[i-1] - ((DV[i-1] * t)   (0.5 * (D[i-1]-LV_acc_mps2[i-1]) * t^2))
    
    D[i] <- ((DV[i])^2) / (den * (standstill_frspacing - Z[i]))   LV_acc_mps2[i]
    
  }
  
  return(tibble(DV, Z, D))
  
}
  

Просмотр функции с помощью flow :

 flow_run(calculate_decc(initial_DV = 25, 
                         initial_frspacing =200, 
                         standstill_frspacing=10,
                         t=1/60, 
                         nrows=1000,
                         LV_acc_mps2=vector(mode = "double", length = 1000),
                         den=2),
          , browse = TRUE)  
  

Ошибка:

 > flow_run(calculate_decc(initial_DV = 25, 
                           initial_frspacing =200, 
                           standstill_frspacing=10,
                           t=1/60, 
                           nrows=1000,
                           LV_acc_mps2=vector(mode = "double", length = 1000),
                           den=2),
            , browse = TRUE)
Next block:  standard 
 D_first <- ((initial_DV)^2)/(den * (standstill_frspacing - initial_frspacing))   ;    LV_acc_mps2[1];DV <- vector(mode = "double", length = nrows);DV[1] <- initial_DV;D <- vector(mode = "double", length = nrows);D[1] <- D_first;Z <- vector(mode = "double", length = nrows);Z[1] <- initial_frspacing 
flow_browser[1]> 
Next block:  for 
 for (i in 2:nrows) 
flow_browser[2]> 
Error: object 'DV' not found  
  

Что я пробовал:

Моя функция работает при запуске вне flow :

 > calculate_decc(initial_DV = 25, 
                           initial_frspacing =200, 
                           standstill_frspacing=10,
                           t=1/60, 
                           nrows=1000,
                           LV_acc_mps2=vector(mode = "double", length = 1000),
                           den=2)
# A tibble: 1,000 x 3
      DV     Z     D
   <dbl> <dbl> <dbl>
 1  25    200  -1.64
 2  25.0  200. -1.64
 3  24.9  199. -1.64
 4  24.9  199. -1.64
 5  24.9  198. -1.64
 6  24.9  198. -1.64
 7  24.8  198. -1.64
 8  24.8  197. -1.64
 9  24.8  197. -1.64
10  24.8  196. -1.64
# ... with 990 more rows  
  

Чего я здесь не понимаю?

Ответ №1:

flow::flow_run() к сожалению, было много проблем, извините за это.

Пожалуйста, переустановите пакет, и следующее должно сработать.

 library(tibble)
# remotes::install_github("moodymudskipper/flow")
library(flow)

flow_run(calculate_decc(initial_DV = 25, 
                        initial_frspacing =200, 
                        standstill_frspacing=10,
                        t=1/60, 
                        nrows=1000,
                        LV_acc_mps2=vector(mode = "double", length = 1000),
                        den=2), browse = TRUE)
  

Это запустит браузер внутри тела вашей функции, за исключением того, что вы заметите несколько flow::update() вызовов, которые автоматически обновляют данные диаграммы.

отладка

Всякий раз, когда вы хотите нарисовать диаграмму текущей ситуации, вызывайте d без круглых скобок (если d значение переопределяется переменной, используйте flow_draw() для того же эффекта).

консоль

Вид

Комментарии:

1. Это здорово. Спасибо вам за этот пакет и ваши постоянные улучшения.