Nie do końca określiłeś, jakiej konwersji chcesz dokonać, więc pomnożyłem wartości dziesiętne przez to, co uważałem za odpowiednie (myśląc, że trzycyfrowe pozycje były w rzeczywistości odpowiednikami cyfr w liczbach o podstawie 256, a następnie wyświetlały się ponownie w podstawie 10). Jeśli chcesz, aby kolejność lokalizacji została odwrócona, jak sugerowałem w innym miejscu, odwróciłbyś indeksowanie 'vals' w obu rozwiązaniach
convIP <- function(IP) { vals <- read.table(text=as.character(IP), sep=".")
return( vals[1] + 256*vals[2] + 256^2*vals[3] + 256^3*vals[4]) }
> convIP(dat$IP)
V1
1 2476281533
2 134990147
3 2352289344
4 173345204
5 2122844258
6 1153107520
(Zwykle lepszą praktyką informatyczną jest określenie, co uważasz za poprawną odpowiedź, aby można było przeprowadzić test. Powyższy komentarz Bertelsona byłby szybszy i domyślnie używa 1000, 1000^2 i 1000^3 jako współczynników).
Próbuję uprościć kod, ale obawiam się, że trzeba użyć Reduce("+", ...)
może sprawić, że będzie bardziej złożony. Nie możesz użyć sum
ponieważ nie jest zwektoryzowany.
convIP <- function(IP) { vals <- read.table(text=as.character(IP), sep=".")
return( Reduce("+", vals*256^(3:0))) }
> convIP(dat$IP)
[1] 5737849088 5112017 2717938944 1245449 3925902848 16449610