Search code examples
rbyte

Converting kilobytes, megabytes etc. to bytes in R


Is there a standard function in R to convert strings representing numbers of bytes such as

  • 11855276K
  • 113M
  • 2.40G

to integer numbers of bytes?

I came across humanReadable in the package gdata, but this does the conversion the other way round. I know that I can parse the string and then do the maths myself, but I wondered whether something exists already.


Solution

  • The excellent fs package has the function fs_bytes that can handle this in both directions.

    ## Create some number of bytes of differing units, and "convert" to fs_bytes
    sizes <- c("11855276K", "113M", "2.40G", "1234") |>
      fs::fs_bytes()
    
    ## It picks sensible human-readable default units for printing
    sizes
    ## 11.31G 113M   2.4G   1.21K
    
    ## The data is stored as numeric
    str(sizes)
    ## 'fs_bytes' num [1:4] 11.31G 113M 2.4G 1.21K
    
    ## As a result, you can perform numeric operations on them
    sum(sizes)
    ## 13.8G
    
    ## Use as.numeric to print the values as bytes
    as.numeric(sizes)
    ## [1] 12139802624   118489088  2576980378        1234