2012-10-09 15 views
6

W R Mam numer, powiedzmy 1293828893, o nazwie x.Dzielenie liczby w R

pragnę podzielić tę liczbę, tak aby usunąć środkowe 4 cyfry 3828 i ich zwrotu, pseudokod jest następująca:

splitnum <- function(number){ 
    #check number is 10 digits 
    if(nchar(number) != 10){ 
      stop("number not of right size"); 
    } 
    middlebits <- middle 4 digits of number 
    return(middlebits); 
} 

Jest to dość proste pytanie, ale jedyne rozwiązania mają znaleźć zastosowanie do ciągi znaków, a nie numeryczne.

Jeśli interesuję, próbuję utworzyć implementację w R z Middle-square method, ale ten krok jest szczególnie trudny.

Odpowiedz

8

Wystarczy użyć podział integer:

> x <- 1293828893 
> (x %/% 1e3) %% 1e4 
[1] 3828 
6

Oto funkcja, która całkowicie zapobiega konwersji numeru do znaku

splitnum <- function(number){ 
    #check number is 10 digits 
    if(trunc(log10(X))!=9) { 
      stop("number not of right size") 
    } 
    (number %/% 1e3) %% 1e4 
} 

splitnum(1293828893) 
# [1] 3828 
9

Można wykorzystać substr(). Zobacz jego stronę pomocy: ?substr. W funkcji zrobiłbym:

splitnum <- function(number){ 
    #check number is 10 digits 
    stopifnot(nchar(number) == 10) 
    as.numeric(substr(number, start = 4, stop = 7)) 
} 

co daje:

> splitnum(1293828893) 
[1] 3828 

Zdjąć opakowanie as.numeric(....) w ostatnim wierszu chcesz jako ciąg cyfr.

Powiązane problemy