Du var inte helt specifik om vilken konvertering du ville ha, så jag multiplicerade decimalvärdena med vad jag trodde kunde passa (trodde att de tresiffriga posterna faktiskt var siffror motsvarade i "bas 256"-tal som sedan visades igen i bas 10). Om du ville att ordningen på platserna skulle vara omvänd, som jag har sett föreslagit någon annanstans, skulle du vända om indexeringen av "vals" i båda lösningarna
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 är vanligtvis bättre IT-praxis att ange vad du tror är det korrekta svaret så att testning kan göras. Bertelsons kommentar ovan skulle vara snabbare och använder implicit 1000, 1000^2 och 1000^3 som faktorer.)
Jag är sugen på att förenkla koden men fruktar att behovet av att använda Reduce("+", ...)
kan göra det mer komplicerat. Du kan inte använda sum
eftersom det inte vektoriseras.
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