必要な変換について完全に具体的ではなかったので、10進数に適切と思われる値を掛けました(3桁の項目は、実際には「基数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