Você não foi totalmente específico sobre qual conversão queria, então multipliquei os valores decimais pelo que achei apropriado (pensando que os itens de três dígitos eram na verdade equivalentes de dígitos em números de "base 256" e reexibidos na base 10). Se você quisesse que a ordem dos locais fosse invertida, como vi sugerido em outro lugar, você reverteria a indexação de 'vals' em ambas as soluções
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
(Geralmente, é melhor prática de TI especificar o que você acha que é a resposta correta para que o teste possa ser feito. O comentário de Bertelson acima seria mais rápido e usa implicitamente 1000, 1000^2 e 1000^3 como os fatores.)
Estou tentando simplificar o código, mas temo que a necessidade de usar
Reduce("+", ...)
pode torná-lo mais complexo. Você não pode usar sum
porque não é vetorizado. 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