Du var ikke helt specifik med hensyn til, hvilken konvertering du ønskede, så jeg gangede decimalværdierne med, hvad jeg troede kunne passende (troede, at de tre-cifrede elementer faktisk var cifferækvivalenter i "base 256"-tal og derefter genvist i base 10). Hvis du ønskede, at rækkefølgen af placeringerne skulle være omvendt, som jeg har set foreslået andetsteds, ville du vende indekseringen af 'vals' i begge løsninger
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
(Det er normalt bedre it-praksis at specificere, hvad du mener er det rigtige svar, så test kan udføres. Bertelsons kommentar ovenfor ville være hurtigere og bruger implicit 1000, 1000^2 og 1000^3 som faktorerne.)
Jeg prøver at forenkle koden, men frygter, at det er nødvendigt at bruge Reduce("+", ...)
kan gøre det mere komplekst. Du kan ikke bruge sum
fordi det ikke er vektoriseret.
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