@Nova У меня был такой же опыт, прогресс достигает 100%, прежде чем на практике заканчиваются вычисления

равится функция dplyr "progress_estimated", но я не могу понять, как заставить индикатор выполнения работать внутри цепочки dplyr. Я поместил воспроизводимый пример с кодом внизу здесь.

У меня довольно большой data.frame, как это:

                cdatetime latitude longitude   
1 2013-01-11 06:40:00 CST 49.74697 -93.30951
2 2013-01-12 15:55:00 CST 49.74697 -93.30951 
3 2013-01-07 20:30:00 CST 49.74697 -93.30951 

и я хотел бы рассчитать время восхода для каждой даты, используя библиотеки

library(dplyr)
library(StreamMetabolism)

Я могу заставить бар dplyr progress_estimated работать внутри цикла, например:

Уродливая петля (работает)

p <- progress_estimated(nrow(test))

for (i in 1:nrow(test)){
  p$tick()$print()
  datetime = as.POSIXct(substr(test$cdatetime[i], 1, 20), tz = "CST6CDT")
  test$sunrise[i] <- sunrise.set(test$latitude[i], test$longitude[i], datetime, "CST6CDT", num.days = 1)[1,1]
}

но как я могу вложить его в мою функцию, чтобы я мог избежать использования цикла?

Предпочитаю использовать:

SunriseSet <- function(dataframe, timezone){
  dataframe %>% 
    rowwise() %>% 
    mutate(# calculate the date-time using the correct timezone
      datetime = as.POSIXct(substr(cdatetime, 1, 20), tz = timezone),
      # Get the time of sunrise and sunset on this day, at the county midpoint
      sunrise = sunrise.set(latitude, longitude, datetime, timezone, num.days = 1)[1,1])
}

Как получить индикатор выполнения здесь?

test2 <- SunriseSet(test, "CST6CDT")

Вот некоторые примеры данных:

test <- data.frame(cdatetime = rep("2013-01-11 06:40:00", 300),
                   latitude = seq(49.74697, 50.04695, 0.001),
                   longitude = seq(-93.30951, -93.27960, 0.0001))

Ответы на вопрос(2)

Ваш ответ на вопрос