我正在使用Matrix
的{{1}}包。我有一个sparseVector
R
和要查找的一些值(普通向量)
index.map <- sparseVector(x=1:3, i=c(10, 33, 50), length=50)
现在我希望提取values <- runif(3)
通过values
的元素,例如
index.map
我收到错误
values[index.map[33]] # should return values[2]
可能是因为R不知道如何通过Error in values[index.map[33]] : invalid subscript type 'S4'
对数字values
进行子集化。
我可以将sparseVector
强制转换为整数来进行查找:
index.map
但这对于这样一个简单的操作来说相当冗长,每次使用values[as(index.map[33], 'integer')] == values[2] # TRUE
时我都必须进行强制操作 - 我不确定这是多么有效。
是否有不同的方法来进行此索引?或者这是唯一的选择吗?
我认为将index.map
转换为sparseVector可能会有所帮助,因为Matrix包可能知道如何通过另一个sparseVector对sparseVector进行子集化,但它不会:
values
更新 as(values, 'sparseVector')[index.map[33]]
# Error in as(values, "sparseVector")[index.map[33]] :
# object of type 'S4' is not subsettable
(感谢@AleksandrVoitov!)似乎并不是一直都在工作。例如
@x
正在返回values[index.map[c(10, 10, 33)]@x]
而不是values[c(1, 2, 1)]
,而在values[c(1, 1, 2)]
上使用as(.., 'integer')
按预期工作。也许index.map[c(10, 10, 33)]
并不意味着成为公众&#39;与sparseVector交互的方式?
答案 0 :(得分:1)
尝试使用以下内容进行子搜索:
values[index.map[33]@x]
这会给你
values[2]=0.608075