2012-06-06 13 views
6

Czy istnieje standardowa funkcja w R do konwersji ciągów reprezentujących liczbę bajtów, takich jakKonwersja kilobajty, megabajty itd. Do bajtów R

  • 11855276K
  • 113M
  • 2,40 g

na liczbę całkowitą bajtów?

Natknąłem się na humanReadable w pakiecie gdata, ale to robi konwersję na odwrót. Wiem, że potrafię sparsować strunę, a następnie sam wykonuję matematykę, ale zastanawiałem się, czy coś już istnieje.

Odpowiedz

5

Prosta funkcja to zrobić:

x <- c("11855276K", "113M", "2.40G", "1234") 

convb <- function(x){ 
    ptn <- "(\\d*(.\\d+)*)(.*)" 
    num <- as.numeric(sub(ptn, "\\1", x)) 
    unit <- sub(ptn, "\\3", x)    
    unit[unit==""] <- "1" 

    mult <- c("1"=1, "K"=1024, "M"=1024^2, "G"=1024^3) 
    num * unname(mult[unit]) 
} 

convb(x) 
[1] 12139802624 118489088 2576980378  1234 

Możesz dodać dodatkowe jednostki i konwersji, na przykład terabajty.

+0

OK, to podejście do parsowania-ciąg-a-robienia-do-matematyki-sobie. Moje pytanie brzmiało naprawdę, czy istnieje istniejąca funkcja w pakiecie CRAN. – loris

+0

@loris http://left-pad.io/ –