我假設你想在你的列表和整數中的向量之間進行雙向注入。一種方法是在矢量的字符表示之外創建因子變量。讓我們先從你的代碼的可重複的版本(我會讓它更小的向量):
set.seed(144)
VECTORS <- replicate(1e2, sample(seq_len(1e6), 5), FALSE)
現在你可以從每個向量的字符表示創建一個因子變量:
fvar <- factor(sapply(VECTORS, paste, collapse=" "))
現在我們有VECTORS
元素和整數的字符串表示的雙射:
vec <- c(894025, 153892, 98596, 218401, 36616) # 15th element of VECTORS
which(levels(fvar) == paste(vec, collapse=" "))
# [1] 90
levels(fvar)[90]
# [1] "894025 153892 98596 218401 36616"
as.numeric(strsplit(levels(fvar)[90], " ")[[1]])
# [1] 894025 153892 98596 218401 36616
如果你想將它們包裝成漂亮的功能:
id.from.vec <- function(vec) which(levels(fvar) == paste(vec, collapse=" "))
id.from.vec(c(894025, 153892, 98596, 218401, 36616))
# [1] 90
vec.from.id <- function(id) as.numeric(strsplit(levels(fvar)[id], " ")[[1]])
vec.from.id(90)
# [1] 894025 153892 98596 218401 36616
請注意,即使矢量長度不同,它也可以使用。
沒有足夠的整數來映射'1e6^5'可能的向量。 – Roland
看起來,像'匹配(矢量,獨特(矢量))'也許可能有幫助 –