通过sparseVector索引向量

时间:2017-03-24 06:42:28

标签: r

我正在使用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交互的方式?

1 个答案:

答案 0 :(得分:1)

尝试使用以下内容进行子搜索:

values[index.map[33]@x]

这会给你

values[2]=0.608075