Vous n'étiez pas tout à fait précis sur la conversion que vous vouliez, j'ai donc multiplié les valeurs décimales par ce que je pensais être approprié (en pensant que les éléments à trois chiffres étaient en fait des équivalents de chiffres dans les nombres "base 256" puis réaffichés en base 10). Si vous vouliez que l'ordre des emplacements soit inversé, comme je l'ai vu suggéré ailleurs, vous inverseriez l'indexation des 'vals' dans les deux solutions
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
(Il est généralement préférable de spécifier ce que vous pensez être la bonne réponse afin que le test puisse être effectué. Le commentaire de Bertelson ci-dessus serait plus rapide et utilise implicitement 1000, 1000^2 et 1000^3 comme facteurs.)
Je tente de simplifier le code mais je crains que la nécessité d'utiliser Reduce("+", ...)
peut le rendre plus complexe. Vous ne pouvez pas utiliser sum
car il n'est pas vectorisé.
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