muschellij2 / SummarizedActigraphy

Coerce Actigraphy to Summarized Experiments
http://johnmuschelli.com/SummarizedActigraphy/
GNU General Public License v3.0
4 stars 3 forks source link

In calibrate() function, Error in get_sample_rate(x) : length(sample_rate) == 1 is not TRUE #1

Closed martakarass closed 3 years ago

martakarass commented 3 years ago

I ran into the error when trying to use SummarizedActigraphy::calibrate() function. A reproducible example provided below.

rm(list = ls())

# install.packages("adeptdata")
library(adeptdata)
library(MIMSunit)
library(lubridate)
library(tidyverse)
library(SummarizedActigraphy)

df <- 
  adeptdata::acc_running %>% 
  filter(loc_id == "left_hip") %>%
  select(HEADER_TIME_STAMP = date_time, X = x, Y = y, Z = z) %>%
  mutate(HEADER_TIME_STAMP = lubridate::ymd_hms(HEADER_TIME_STAMP))
head(df)
#     HEADER_TIME_STAMP      X      Y     Z
# 1 2018-10-25 17:57:30 -0.199 -1.012 0.133
# 2 2018-10-25 17:57:30 -0.191 -1.027 0.133
# 3 2018-10-25 17:57:30 -0.191 -1.035 0.121
# 4 2018-10-25 17:57:30 -0.191 -1.027 0.109
# 5 2018-10-25 17:57:30 -0.191 -1.016 0.109
# 6 2018-10-25 17:57:30 -0.184 -1.012 0.121

df_calib <- SummarizedActigraphy::calibrate(
  df, fix_zeros = TRUE, round_after_calibration = TRUE)

and the error I see says:

Fixing Zeros
Writing out file for GGIR
Error in get_sample_rate(x) : length(sample_rate) == 1 is not TRUE
In addition: Warning message:
In get_sample_rate(x) : Guessing sample_rate from the data
Session info ```r devtools::session_info() ``` ``` ─ Session info ────────────────────────────────────────────────────────────────────────────────────────────── setting value version R version 4.0.5 (2021-03-31) os macOS Catalina 10.15.7 system x86_64, darwin17.0 ui RStudio language (EN) collate en_US.UTF-8 ctype en_US.UTF-8 tz America/New_York date 2021-06-30 ─ Packages ────────────────────────────────────────────────────────────────────────────────────────────────── package * version date lib source adeptdata * 1.1 2021-03-28 [1] CRAN (R 4.0.2) anytime 0.3.9 2020-08-27 [1] CRAN (R 4.0.2) assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.0.2) backports 1.2.1 2020-12-09 [1] CRAN (R 4.0.2) bitops 1.0-7 2021-04-24 [1] CRAN (R 4.0.2) blogdown 1.3 2021-04-14 [1] CRAN (R 4.0.2) bookdown 0.22 2021-04-22 [1] CRAN (R 4.0.2) broom 0.7.6 2021-04-05 [1] CRAN (R 4.0.2) cachem 1.0.4 2021-02-13 [1] CRAN (R 4.0.5) callr 3.7.0 2021-04-20 [1] CRAN (R 4.0.2) caTools 1.18.2 2021-03-28 [1] CRAN (R 4.0.2) cellranger 1.1.0 2016-07-27 [1] CRAN (R 4.0.2) cli 2.5.0 2021-04-26 [1] CRAN (R 4.0.2) colorspace 2.0-0 2020-11-11 [1] CRAN (R 4.0.2) crayon 1.4.1 2021-02-08 [1] CRAN (R 4.0.2) curl 4.3 2019-12-02 [1] CRAN (R 4.0.1) data.table 1.14.0 2021-02-21 [1] CRAN (R 4.0.2) DBI 1.1.1 2021-01-15 [1] CRAN (R 4.0.2) dbplyr 2.1.1 2021-04-06 [1] CRAN (R 4.0.2) desc 1.3.0 2021-03-05 [1] CRAN (R 4.0.2) devtools 2.4.2 2021-06-07 [1] CRAN (R 4.0.2) digest 0.6.27 2020-10-24 [1] CRAN (R 4.0.2) dplyr * 1.0.5 2021-03-05 [1] CRAN (R 4.0.2) ellipsis 0.3.1 2020-05-15 [1] CRAN (R 4.0.2) evaluate 0.14 2019-05-28 [1] CRAN (R 4.0.1) fansi 0.4.2 2021-01-15 [1] CRAN (R 4.0.2) fastmap 1.1.0 2021-01-25 [1] CRAN (R 4.0.5) forcats * 0.5.1 2021-01-27 [1] CRAN (R 4.0.2) fs 1.5.0 2020-07-31 [1] CRAN (R 4.0.2) generics 0.1.0 2020-10-31 [1] CRAN (R 4.0.2) GGIR 2.4-0 2021-06-03 [1] CRAN (R 4.0.2) ggplot2 * 3.3.3 2020-12-30 [1] CRAN (R 4.0.2) glue 1.4.2 2020-08-27 [1] CRAN (R 4.0.2) gtable 0.3.0 2019-03-25 [1] CRAN (R 4.0.2) haven 2.4.1 2021-04-23 [1] CRAN (R 4.0.2) hms 1.0.0 2021-01-13 [1] CRAN (R 4.0.2) htmltools 0.5.1.1 2021-01-22 [1] CRAN (R 4.0.2) httpuv 1.6.1 2021-05-07 [1] CRAN (R 4.0.5) httr 1.4.2 2020-07-20 [1] CRAN (R 4.0.2) jsonlite 1.7.2 2020-12-09 [1] CRAN (R 4.0.2) knitr 1.33 2021-04-24 [1] CRAN (R 4.0.2) later 1.2.0 2021-04-23 [1] CRAN (R 4.0.5) lattice 0.20-41 2020-04-02 [1] CRAN (R 4.0.5) lifecycle 1.0.0 2021-02-15 [1] CRAN (R 4.0.2) lubridate * 1.7.10 2021-02-26 [1] CRAN (R 4.0.2) magrittr 2.0.1 2020-11-17 [1] CRAN (R 4.0.2) MASS 7.3-53.1 2021-02-12 [1] CRAN (R 4.0.5) memoise 2.0.0 2021-01-26 [1] CRAN (R 4.0.2) mime 0.10 2021-02-13 [1] CRAN (R 4.0.2) MIMSunit * 0.10.0 2021-04-29 [1] CRAN (R 4.0.2) modelr 0.1.8 2020-05-19 [1] CRAN (R 4.0.2) munsell 0.5.0 2018-06-12 [1] CRAN (R 4.0.2) pillar 1.6.0 2021-04-13 [1] CRAN (R 4.0.2) pkgbuild 1.2.0 2020-12-15 [1] CRAN (R 4.0.2) pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.0.2) pkgload 1.2.1 2021-04-06 [1] CRAN (R 4.0.2) plyr 1.8.6 2020-03-03 [1] CRAN (R 4.0.2) prettyunits 1.1.1 2020-01-24 [1] CRAN (R 4.0.2) processx 3.5.1 2021-04-04 [1] CRAN (R 4.0.2) promises 1.2.0.1 2021-02-11 [1] CRAN (R 4.0.5) ps 1.6.0 2021-02-28 [1] CRAN (R 4.0.2) purrr * 0.3.4 2020-04-17 [1] CRAN (R 4.0.2) R.methodsS3 1.8.1 2020-08-26 [1] CRAN (R 4.0.2) R.oo 1.24.0 2020-08-26 [1] CRAN (R 4.0.2) R.utils 2.10.1 2020-08-26 [1] CRAN (R 4.0.2) R6 2.5.0 2020-10-28 [1] CRAN (R 4.0.2) Rcpp 1.0.6 2021-01-15 [1] CRAN (R 4.0.2) readr * 1.4.0 2020-10-05 [1] CRAN (R 4.0.2) readxl 1.3.1 2019-03-13 [1] CRAN (R 4.0.2) remotes 2.3.0 2021-04-01 [1] CRAN (R 4.0.2) reprex 2.0.0 2021-04-02 [1] CRAN (R 4.0.2) rlang 0.4.10 2020-12-30 [1] CRAN (R 4.0.2) rmarkdown 2.7 2021-02-19 [1] CRAN (R 4.0.2) rprojroot 2.0.2 2020-11-15 [1] CRAN (R 4.0.2) rstudioapi 0.13 2020-11-12 [1] CRAN (R 4.0.2) rvest 1.0.0 2021-03-09 [1] CRAN (R 4.0.2) scales 1.1.1 2020-05-11 [1] CRAN (R 4.0.2) servr 0.22 2021-04-14 [1] CRAN (R 4.0.2) sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 4.0.2) shiny 1.6.0 2021-01-25 [1] CRAN (R 4.0.5) signal 0.7-7 2021-05-25 [1] CRAN (R 4.0.2) stringi 1.5.3 2020-09-09 [1] CRAN (R 4.0.2) stringr * 1.4.0 2019-02-10 [1] CRAN (R 4.0.2) SummarizedActigraphy * 0.5.0 2021-07-01 [1] Github (muschellij2/SummarizedActigraphy@2eeeb26) testthat 3.0.3 2021-06-16 [1] CRAN (R 4.0.2) tibble * 3.1.1 2021-04-18 [1] CRAN (R 4.0.2) tidyr * 1.1.3 2021-03-03 [1] CRAN (R 4.0.2) tidyselect 1.1.0 2020-05-11 [1] CRAN (R 4.0.2) tidyverse * 1.3.1 2021-04-15 [1] CRAN (R 4.0.2) tinytex 0.31 2021-03-30 [1] CRAN (R 4.0.2) tsibble 1.0.1 2021-04-12 [1] CRAN (R 4.0.2) usethis 2.0.1 2021-02-10 [1] CRAN (R 4.0.2) utf8 1.2.1 2021-03-12 [1] CRAN (R 4.0.2) vctrs 0.3.7 2021-03-29 [1] CRAN (R 4.0.2) withr 2.4.2 2021-04-18 [1] CRAN (R 4.0.2) xfun 0.22 2021-03-11 [1] CRAN (R 4.0.2) xml2 1.3.2 2020-04-23 [1] CRAN (R 4.0.2) xtable 1.8-4 2019-04-21 [1] CRAN (R 4.0.5) yaml 2.2.1 2020-02-01 [1] CRAN (R 4.0.2) zoo 1.8-9 2021-03-09 [1] CRAN (R 4.0.2) [1] /Library/Frameworks/R.framework/Versions/4.0/Resources/library ```
muschellij2 commented 3 years ago

In short - specify the sample rate directly and I guess more care needs to be taken for mutate(HEADER_TIME_STAMP = lubridate::ymd_hms(HEADER_TIME_STAMP)) as it is causing an issue that truncates the millseconds (I suggest opening up an issue on lubridate).

The warning In get_sample_rate(x) : Guessing sample_rate from the data tells you that it's trying to do - it's guessing the sample rate because you didn't specify one.

For the lubridate issue see (quick google, there may be better explanations): https://stackoverflow.com/questions/54369298/r-lubridate-ymd-hms-millisecond-diff/54369532 and https://community.rstudio.com/t/recovering-date-time-milliseconds-w-lubridate/15797/3. You probably also need to set options(digit.secs = 3):

Example where digit.secs is not set

Here we don't set digits.secs, but everything is fine until we do mutate(HEADER_TIME_STAMP = lubridate::ymd_hms(HEADER_TIME_STAMP)):

# install.packages("adeptdata")
library(adeptdata)
library(MIMSunit)
library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#> 
#>     date, intersect, setdiff, union
library(tidyverse)
library(SummarizedActigraphy)

# digit.secs isn't set - decimal dates get truncated
getOption("digit.secs")
#> NULL
df <- 
  adeptdata::acc_running %>% 
  filter(loc_id == "left_hip") %>%
  select(HEADER_TIME_STAMP = date_time, X = x, Y = y, Z = z)
get_sample_rate(df)
#> Warning in get_sample_rate(df): Guessing sample_rate from the data
#> [1] 100

As you can see, we can estimate the sample rate.

head(df)
#>     HEADER_TIME_STAMP      X      Y     Z
#> 1 2018-10-25 17:57:30 -0.199 -1.012 0.133
#> 2 2018-10-25 17:57:30 -0.191 -1.027 0.133
#> 3 2018-10-25 17:57:30 -0.191 -1.035 0.121
#> 4 2018-10-25 17:57:30 -0.191 -1.027 0.109
#> 5 2018-10-25 17:57:30 -0.191 -1.016 0.109
#> 6 2018-10-25 17:57:30 -0.184 -1.012 0.121
head(as.numeric(df$HEADER_TIME_STAMP) %% 1)
#> [1] 0.00000000 0.00999999 0.01999998 0.02999997 0.03999996 0.04999995
df = df %>% 
  mutate(HEADER_TIME_STAMP = lubridate::ymd_hms(HEADER_TIME_STAMP))
head(as.numeric(df$HEADER_TIME_STAMP) %% 1)
#> [1] 0 0 0 0 0 0

d = diff(df$HEADER_TIME_STAMP)
units(d) = "secs"
unique(round(1/as.numeric(d)))
#> [1] Inf   1
get_sample_rate(df)
#> Warning in get_sample_rate(df): Guessing sample_rate from the data
#> Error in get_sample_rate(df): length(sample_rate) == 1 is not TRUE

Created on 2021-07-01 by the reprex package (v2.0.0)

Session info ``` r sessioninfo::session_info() #> ─ Session info ─────────────────────────────────────────────────────────────── #> setting value #> version R version 4.0.5 (2021-03-31) #> os macOS Catalina 10.15.7 #> system x86_64, darwin17.0 #> ui X11 #> language (EN) #> collate en_US.UTF-8 #> ctype en_US.UTF-8 #> tz America/New_York #> date 2021-07-01 #> #> ─ Packages ─────────────────────────────────────────────────────────────────── #> package * version date lib source #> adeptdata * 1.1 2021-03-28 [1] CRAN (R 4.0.2) #> anytime 0.3.9 2020-08-27 [1] CRAN (R 4.0.2) #> assertthat 0.2.1 2019-03-21 [2] CRAN (R 4.0.0) #> backports 1.2.1 2020-12-09 [1] CRAN (R 4.0.2) #> broom 0.7.6 2021-04-05 [1] CRAN (R 4.0.2) #> cellranger 1.1.0 2016-07-27 [2] CRAN (R 4.0.0) #> cli 2.5.0 2021-04-26 [1] CRAN (R 4.0.2) #> colorspace 2.0-0 2020-11-11 [1] CRAN (R 4.0.2) #> crayon 1.4.1 2021-02-08 [1] CRAN (R 4.0.2) #> DBI 1.1.1 2021-01-15 [1] CRAN (R 4.0.2) #> dbplyr 2.1.1 2021-04-06 [1] CRAN (R 4.0.2) #> digest 0.6.27 2020-10-24 [1] CRAN (R 4.0.2) #> dplyr * 1.0.5 2021-03-05 [1] CRAN (R 4.0.2) #> ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.0.2) #> evaluate 0.14 2019-05-28 [2] CRAN (R 4.0.0) #> fansi 0.4.2 2021-01-15 [1] CRAN (R 4.0.2) #> forcats * 0.5.1 2021-01-27 [1] CRAN (R 4.0.2) #> fs 1.5.0 2020-07-31 [2] CRAN (R 4.0.2) #> generics 0.1.0 2020-10-31 [1] CRAN (R 4.0.2) #> ggplot2 * 3.3.3 2020-12-30 [1] CRAN (R 4.0.2) #> glue 1.4.2 2020-08-27 [1] CRAN (R 4.0.2) #> gtable 0.3.0 2019-03-25 [2] CRAN (R 4.0.0) #> haven 2.3.1 2020-06-01 [2] CRAN (R 4.0.0) #> highr 0.9 2021-04-16 [1] CRAN (R 4.0.2) #> hms 1.0.0 2021-01-13 [1] CRAN (R 4.0.2) #> htmltools 0.5.1.1 2021-01-22 [1] CRAN (R 4.0.2) #> httr 1.4.2 2020-07-20 [2] CRAN (R 4.0.2) #> jsonlite 1.7.2 2020-12-09 [1] CRAN (R 4.0.2) #> knitr 1.33 2021-04-24 [1] CRAN (R 4.0.2) #> lattice 0.20-41 2020-04-02 [2] CRAN (R 4.0.5) #> lifecycle 1.0.0 2021-02-15 [1] CRAN (R 4.0.2) #> lubridate * 1.7.10 2021-02-26 [1] CRAN (R 4.0.2) #> magrittr 2.0.1 2020-11-17 [1] CRAN (R 4.0.2) #> MIMSunit * 0.9.2 2020-08-01 [1] CRAN (R 4.0.2) #> modelr 0.1.8 2020-05-19 [2] CRAN (R 4.0.0) #> munsell 0.5.0 2018-06-12 [2] CRAN (R 4.0.0) #> pillar 1.6.0 2021-04-13 [1] CRAN (R 4.0.2) #> pkgconfig 2.0.3 2019-09-22 [2] CRAN (R 4.0.0) #> purrr * 0.3.4 2020-04-17 [2] CRAN (R 4.0.0) #> R.methodsS3 1.8.1 2020-08-26 [1] CRAN (R 4.0.2) #> R.oo 1.24.0 2020-08-26 [1] CRAN (R 4.0.2) #> R.utils 2.10.1 2020-08-26 [1] CRAN (R 4.0.2) #> R6 2.5.0 2020-10-28 [1] CRAN (R 4.0.2) #> Rcpp 1.0.6 2021-01-15 [1] CRAN (R 4.0.2) #> readr * 1.4.0 2020-10-05 [1] CRAN (R 4.0.2) #> readxl 1.3.1 2019-03-13 [2] CRAN (R 4.0.0) #> reprex 2.0.0 2021-04-02 [1] CRAN (R 4.0.2) #> rlang 0.4.11 2021-04-30 [1] CRAN (R 4.0.2) #> rmarkdown 2.7 2021-02-19 [1] CRAN (R 4.0.2) #> rstudioapi 0.13 2020-11-12 [1] CRAN (R 4.0.2) #> rvest 1.0.0 2021-03-09 [1] CRAN (R 4.0.2) #> scales 1.1.1 2020-05-11 [2] CRAN (R 4.0.0) #> sessioninfo 1.1.1 2018-11-05 [2] CRAN (R 4.0.0) #> stringi 1.5.3 2020-09-09 [1] CRAN (R 4.0.2) #> stringr * 1.4.0 2019-02-10 [2] CRAN (R 4.0.0) #> styler 1.4.1 2021-03-30 [1] CRAN (R 4.0.2) #> SummarizedActigraphy * 0.5.0 2021-05-03 [1] Bioconductor #> tibble * 3.1.1 2021-04-18 [1] CRAN (R 4.0.2) #> tidyr * 1.1.3 2021-03-03 [1] CRAN (R 4.0.2) #> tidyselect 1.1.0 2020-05-11 [2] CRAN (R 4.0.0) #> tidyverse * 1.3.0 2019-11-21 [2] CRAN (R 4.0.0) #> tsibble 1.0.1 2021-04-12 [1] CRAN (R 4.0.2) #> utf8 1.2.1 2021-03-12 [1] CRAN (R 4.0.2) #> vctrs 0.3.7 2021-03-29 [1] CRAN (R 4.0.2) #> withr 2.4.2 2021-04-18 [1] CRAN (R 4.0.2) #> xfun 0.22 2021-03-11 [1] CRAN (R 4.0.2) #> xml2 1.3.2 2020-04-23 [2] CRAN (R 4.0.0) #> yaml 2.2.1 2020-02-01 [2] CRAN (R 4.0.0) #> zoo 1.8-9 2021-03-09 [1] CRAN (R 4.0.2) #> #> [1] /Users/johnmuschelli/Library/R/4.0/library #> [2] /Library/Frameworks/R.framework/Versions/4.0/Resources/library ```

Digit.secs is set, but it's a different type of error

# install.packages("adeptdata")
library(adeptdata)
library(MIMSunit)
library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#> 
#>     date, intersect, setdiff, union
library(tidyverse)
library(SummarizedActigraphy)

# digit.secs is set - decimal dates get truncated
options(digits.secs = 3)
df <- 
  adeptdata::acc_running %>% 
  filter(loc_id == "left_hip") %>%
  select(HEADER_TIME_STAMP = date_time, X = x, Y = y, Z = z)
d = diff(df$HEADER_TIME_STAMP)
units(d) = "secs"
head(d)
#> Time differences in secs
#> [1] 0.00999999 0.00999999 0.00999999 0.00999999 0.00999999 0.00999999
unique(round(1/as.numeric(d)))
#> [1] 100
get_sample_rate(df)
#> Warning in get_sample_rate(df): Guessing sample_rate from the data
#> [1] 100

head(df)
#>        HEADER_TIME_STAMP      X      Y     Z
#> 1 2018-10-25 17:57:30.00 -0.199 -1.012 0.133
#> 2 2018-10-25 17:57:30.00 -0.191 -1.027 0.133
#> 3 2018-10-25 17:57:30.01 -0.191 -1.035 0.121
#> 4 2018-10-25 17:57:30.02 -0.191 -1.027 0.109
#> 5 2018-10-25 17:57:30.03 -0.191 -1.016 0.109
#> 6 2018-10-25 17:57:30.04 -0.184 -1.012 0.121
head(as.numeric(df$HEADER_TIME_STAMP) %% 1)
#> [1] 0.00000000 0.00999999 0.01999998 0.02999997 0.03999996 0.04999995

df = df %>% 
  mutate(HEADER_TIME_STAMP = lubridate::ymd_hms(HEADER_TIME_STAMP))
head(as.numeric(df$HEADER_TIME_STAMP) %% 1)
#> [1] 0.00000000 0.00000000 0.00999999 0.01999998 0.02999997 0.03999996
d = diff(df$HEADER_TIME_STAMP)
units(d) = "secs"
head(d)
#> Time differences in secs
#> [1] 0.00000000 0.00999999 0.00999999 0.00999999 0.00999999 0.00999999
head(round(1/as.numeric(d)))
#> [1] Inf 100 100 100 100 100
unique(round(1/as.numeric(d)))
#> [1] Inf 100  50
get_sample_rate(df)
#> Warning in get_sample_rate(df): Guessing sample_rate from the data
#> Error in get_sample_rate(df): length(sample_rate) == 1 is not TRUE

Created on 2021-07-01 by the reprex package (v2.0.0)

martakarass commented 3 years ago

Got it. Thank you.