我假设你想在你的列表和整数中的向量之间进行双向注入。一种方法是在矢量的字符表示之外创建因子变量。让我们先从你的代码的可重复的版本(我会让它更小的向量):
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
看起来,像'匹配(矢量,独特(矢量))'也许可能有帮助 –