我从不认为使用Reduce
但是我有一个问题,我认为这会有好处。我想确保向量的每个迭代元素的大小等于或大于前一个元素。我可以使用sapply
执行此操作,但我对Reduce
的尝试失败。如何在Reduce
?
#This works
y <- c(1,2,3,2,4,4)
sapply(seq_along(y)[-length(y)], function(i) y[i] <= y[i+1])
#attempts
Reduce('<', c(1,2,3,2,4,4)), accumulate = TRUE)
Reduce('<', c(1,2,3,2,4,4)))
答案 0 :(得分:5)
diff()
函数在这里是一个合乎逻辑的选择(其他人已经很好地解释了为什么Reduce()
不合适)。它已经设置为比较矢量元素之间的差异,并且已经过矢量化。
> !diff(y) < 0
[1] TRUE TRUE FALSE TRUE TRUE
答案 1 :(得分:3)
绝对无聊?我是:
myFun <- function(x,z){
if(is.null(names(z))) names(z) <- z
if(is.null(names(x))) names(x) <- x
if(as.numeric(names(x)) < as.numeric(names(z))) res <- TRUE else res <- FALSE
names(res) <- names(z)
return(res)
}
as.logical(Reduce(myFun, y, accumulate = TRUE)[-1])
# [1] TRUE TRUE FALSE TRUE TRUE
答案 2 :(得分:2)
我?Reduce
的理解是Reduce
比较第一和第二要素。由于1 < 2
返回1
。它将重用1
,然后将其与第三个元素进行比较,依此类推。这意味着您将始终比较1 < y[3:length(y)]
,结果总是如此。或者你可以尝试:
head(y,-1) < tail(y, -1)
答案 3 :(得分:2)
我不认为它可以用作Reduce
通常会以f(f(x[1],x[2]),x[3])
之类的方式结束,因此您对第三个元素的比较将是TRUE < 3
。
identical(y,sort(y))
对于这个问题,似乎是一种更有效的解决方案。