用内置函数重新表示此R函数?
假设我们在用内置函数重新表示此R函数?,r,vectorization,R,Vectorization,假设我们在[i,j]中有一系列前哨值(称之为y1)和一个值向量i:j(称之为y2)。例如: y1 <- c(649, 652, 656, 658, 660, 661, 669, 671) y2 <- 649:671 y1更有效的功能实现是: y1[findInterval(y2, y1, rightmost.closed=TRUE)+1] 使用示例数据: y1 <- c(649, 652, 656, 658, 660, 661, 669, 671) y2 <- 64
[i,j]
中有一系列前哨值(称之为y1
)和一个值向量i:j
(称之为y2
)。例如:
y1 <- c(649, 652, 656, 658, 660, 661, 669, 671)
y2 <- 649:671
y1更有效的功能实现是:
y1[findInterval(y2, y1, rightmost.closed=TRUE)+1]
使用示例数据:
y1 <- c(649, 652, 656, 658, 660, 661, 669, 671)
y2 <- 649:671
Cody5(y1, y2)
# [1] 652 652 652 656 656 656 656 658 658 660 660 661 669 669 669 669 669 669 669 669 671 671 671
y1[findInterval(y2, y1, rightmost.closed=TRUE)+1]
# [1] 652 652 652 656 656 656 656 658 658 660 660 661 669 669 669 669 669 669 669 669 671 671 671
y1更有效的功能实现是:
y1[findInterval(y2, y1, rightmost.closed=TRUE)+1]
使用示例数据:
y1 <- c(649, 652, 656, 658, 660, 661, 669, 671)
y2 <- 649:671
Cody5(y1, y2)
# [1] 652 652 652 656 656 656 656 658 658 660 660 661 669 669 669 669 669 669 669 669 671 671 671
y1[findInterval(y2, y1, rightmost.closed=TRUE)+1]
# [1] 652 652 652 656 656 656 656 658 658 660 660 661 669 669 669 669 669 669 669 669 671 671 671
y1mycutmycut请解释此函数的作用。你可以用Rcpp来实现它(这在这里很简单)。@Roland:是的,这就是我现在正在做的(但是如果社区知道一种使用内置函数来表达这一点的方法,我宁愿使用它)你的意思是y1[findInterval(y2,y1,最右边的.closed=TRUE)+1]
?@jogo:我不知道'findInterval'。谢谢请解释这个函数的作用。你可以用Rcpp来实现它(这在这里很简单)。@Roland:是的,这就是我现在正在做的(但是如果社区知道一种使用内置函数来表达这一点的方法,我宁愿使用它)你的意思是y1[findInterval(y2,y1,最右边的.closed=TRUE)+1]
?@jogo:我不知道'findInterval'。谢谢好吧,也许矢量化不是正确的表达。我的意思是用更高效的内置函数(如cut)进行分解。这一个似乎更快(哨兵值已排序)。好吧,也许矢量化不是正确的表达式。我的意思是用更高效的内置函数(比如cut)进行分解。这一个看起来更快(哨兵值被排序)。
mycut <- function(x, y) {
x[cut(y, c(-Inf, x),
labels = FALSE, right = FALSE,
include.lowest = TRUE)]
}
y1 <- c(649, 652, 656, 658, 660, 661, 669, 671)
y2 <- 649:671
all.equal(Cody5(y1,y2),
mycut(y1,y2))
#[1] TRUE
y1 <- c(719, 725, 726, 728, 729, 731, 734, 740)
y2 <- 718:740
all.equal(Cody5(y1,y2),
mycut(y1,y2))
#[1] TRUE