Nebyli jste úplně konkrétní ohledně toho, jaký převod chcete, takže jsem vynásobil desetinné hodnoty tím, co jsem považoval za vhodné (myslel jsem si, že třímístné položky byly ve skutečnosti ekvivalenty číslic v číslech se „základem 256“ a poté znovu zobrazeny v základu 10). Pokud byste chtěli, aby bylo pořadí umístění obráceno, jak jsem viděl na jiném místě, obrátili byste indexování 'vals' v obou řešeních
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
(Obvykle je lepší IT praxí specifikovat, co považujete za správnou odpověď, aby bylo možné provést testování. Bertelsonův komentář výše by byl rychlejší a implicitně používá jako faktory 1000, 1000^2 a 1000^3.)
Dělám trhliny ve zjednodušení kódu, ale obávám se, že je potřeba použít Reduce("+", ...)
může to udělat složitější. Nemůžete použít sum
protože to není vektorizované.
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