Non eri del tutto specifico su quale conversione volevi, quindi ho moltiplicato i valori decimali per ciò che ritenevo appropriato (pensando che gli elementi a tre cifre fossero in realtà equivalenti di cifre nei numeri "base 256" quindi rivisualizzati in base 10). Se volessi invertire l'ordine delle posizioni, come ho visto suggerito altrove, invertiresti l'indicizzazione di "vals" in entrambe le soluzioni
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
(Di solito è migliore prassi IT specificare quale ritieni sia la risposta corretta in modo da poter eseguire il test. Il commento di Bertelson sopra sarebbe più veloce e utilizza implicitamente 1000, 1000^2 e 1000^3 come fattori.)
Sto cercando di semplificare il codice ma temo che sia necessario utilizzare Reduce("+", ...)
potrebbe renderlo più complesso. Non puoi usare sum
perché non è vettorizzato.
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