No fue completamente específico acerca de qué conversión quería, así que multipliqué los valores decimales por lo que pensé que podría ser apropiado (pensando que los elementos de tres dígitos eran en realidad equivalentes de dígitos en números de "base 256" y luego se volvieron a mostrar en base 10). Si quisiera invertir el orden de las ubicaciones, como he visto sugerido en otra parte, invertiría la indexación de 'vals' en ambas soluciones
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
(Por lo general, es una mejor práctica de TI especificar cuál cree que es la respuesta correcta para que se puedan realizar las pruebas. El comentario anterior de Bertelson sería más rápido e implícitamente usa 1000, 1000^2 y 1000^3 como factores).
Estoy tratando de simplificar el código, pero temo que la necesidad de usar Reduce("+", ...)
puede hacerlo más complejo. No puede usar sum
porque no está vectorizado.
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