Не бяхте напълно конкретни относно това какво преобразуване искате, така че умножих десетичните стойности по това, което смятах за подходящо (мислейки си, че трицифрените елементи всъщност са еквиваленти на цифри в числа с "база 256", след което се показват отново в база 10). Ако искате редът на местоположенията да бъде обърнат, както видях да се предлага другаде, бихте обърнали индексирането на „vals“ и в двете решения
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
(Обикновено е по-добра ИТ практика да посочите какво смятате за правилния отговор, за да може да се направи тестване. Коментарът на Bertelson по-горе би бил по-бърз и имплицитно използва 1000, 1000^2 и 1000^3 като фактори.)
Опитвам се да опростя кода, но се опасявам, че трябва да използвам Reduce("+", ...)
може да го направи по-сложен. Не можете да използвате sum
защото не е векторизиран.
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