1

使お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)))
4

4 に答える 4

5

diff()関数はここでは論理的な選択です (適切でない理由をうまく説明している他の人もいReduce()ます)。ベクトルの要素間の違いを比較するように設定されており、ベクトル化されています。

> !diff(y) < 0
[1]  TRUE  TRUE FALSE  TRUE  TRUE
于 2012-11-02T09:10:25.523 に答える
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
于 2012-11-02T10:55:41.237 に答える
2

?Reduce1番目と2番目の要素をReduce比較することから、私の理解です。1 < 2返品以来1。再利用1してから、3 番目の要素などと比較します。1 < y[3:length(y)]これは、常に真であることが判明したものを常に比較することを意味します。または、次を試すこともできます。

head(y,-1) < tail(y, -1)
于 2012-11-02T07:37:33.697 に答える