【发布时间】:2014-12-15 03:13:04
【问题描述】:
R 函数 findInterval() 存在以下问题
给定一个向量 X 和一个矩阵 Y,我想找出 X 的元素位于哪个区间。区间是构造的,在 Y 行中有断点。换句话说,对于 X = c(2,3) 和 Y = matrix(c(3,1,4,2,5,4),2,3),输出将为 c(0,2)。我写了以下代码:
X <- c(2,3)
Y <- matrix(c(3,1,4,2,5,4),2,3)
output <- diag(apply(Y,1,function(z)findInterval(X,z)))
它有效。但是,我认为它可以优化,因为 apply 函数返回 2 x 2 矩阵(这就是为什么我必须得到它的对角线)。有没有办法做同样的事情,但是使用函数,它将返回一个向量,将我的向量 X 和矩阵 Y 作为参数?我对高维向量执行此操作,因此获得大小为 10000 x 10000 的不必要矩阵并不是一个好主意恕我直言。为了最大限度地提高效率,我不想使用循环。
提前感谢您的任何反馈。
【问题讨论】:
-
可能是
mapply(findInterval,X, data.frame(t(Y)))? -
谢谢!我尝试使用mapply,但我对此很陌生。转换为df有什么技巧。我的意思是,我不明白 mapply(findInterval,X,t(Y)) 的输出 0 0 0 1 1 0。它不应该将函数应用于 X (2) 的第一个元素和 t(Y) (3,4,5) 的第一个 col,然后应用于第二个,给出结果 c(0,2)?
标签: r vectorization intervals