Bạn không hoàn toàn cụ thể về chuyển đổi mà bạn muốn, vì vậy tôi đã nhân các giá trị thập phân với giá trị mà tôi nghĩ có thể phù hợp (nghĩ rằng các mục có ba chữ số thực sự là tương đương chữ số trong các số "cơ số 256" sau đó được hiển thị lại trong cơ số 10). Nếu bạn muốn thứ tự của các vị trí được đảo ngược, như tôi đã đề xuất ở những nơi khác, bạn sẽ đảo ngược việc lập chỉ mục 'vals' trong cả hai giải pháp
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
(Thông thường, thực hành CNTT tốt hơn là chỉ định những gì bạn nghĩ là câu trả lời chính xác để việc kiểm tra có thể được thực hiện. Nhận xét của Bertelson ở trên sẽ nhanh hơn và mặc nhiên sử dụng 1000, 1000 ^ 2 và 1000 ^ 3 làm hệ số.)
Tôi đang tìm cách đơn giản hóa mã nhưng sợ rằng cần phải sử dụng Reduce("+", ...)
có thể làm cho nó phức tạp hơn. Bạn không thể sử dụng sum
bởi vì nó không được vectơ hóa.
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