Sie waren nicht ganz genau, welche Konvertierung Sie wollten, also multiplizierte ich die Dezimalwerte mit dem, was ich für angemessen hielt (ich dachte, die dreistelligen Elemente waren tatsächlich Ziffernäquivalente in "Basis 256" -Zahlen, die dann in Basis 10 erneut angezeigt wurden). Wenn Sie möchten, dass die Reihenfolge der Speicherorte umgekehrt wird, wie ich an anderer Stelle vorgeschlagen habe, würden Sie die Indizierung von „vals“ in beiden Lösungen umkehren
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
(Es ist normalerweise besser, die Ihrer Meinung nach richtige Antwort anzugeben, damit Tests durchgeführt werden können. Der obige Kommentar von Bertelson wäre schneller und verwendet implizit 1000, 1000^2 und 1000^3 als Faktoren.)
Ich versuche, den Code zu vereinfachen, befürchte aber, dass die Verwendung von Reduce("+", ...)
erforderlich ist kann es komplexer machen. Sie können sum
nicht verwenden weil es nicht vektorisiert ist.
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