Je was niet helemaal specifiek over welke conversie je wilde, dus vermenigvuldigde ik de decimale waarden met wat ik dacht dat geschikt zou zijn (in de veronderstelling dat de driecijferige items eigenlijk cijferequivalenten waren in "basis 256" -getallen en vervolgens opnieuw weergegeven in basis 10). Als u wilt dat de volgorde van de locaties wordt omgekeerd, zoals ik elders heb gesuggereerd, zou u de indexering van 'vals' in beide oplossingen omkeren
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
(Het is meestal een betere IT-praktijk om te specificeren wat u denkt dat het juiste antwoord is, zodat testen kan worden gedaan. Bertelsons opmerking hierboven zou sneller zijn en gebruikt impliciet 1000, 1000^2 en 1000^3 als de factoren.)
Ik probeer de code te vereenvoudigen, maar vrees dat de noodzaak om Reduce("+", ...)
te gebruiken kan het complexer maken. U kunt sum
niet gebruiken omdat het niet gevectoriseerd is.
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