R 用小于符号减少

R 用小于符号减少,r,higher-order-functions,R,Higher Order Functions,我从来没有想过使用Reduce,但我有一个问题,我认为它会有好处。我想确保向量的每个迭代元素的大小等于或大于前一个元素。我可以用sapply做这件事,但我用Reduce做的尝试失败了。我如何将此与Reduce一起使用 我的理解是从?还原,还原比较第一和第二个元素。因为1

我从来没有想过使用Reduce,但我有一个问题,我认为它会有好处。我想确保向量的每个迭代元素的大小等于或大于前一个元素。我可以用sapply做这件事,但我用Reduce做的尝试失败了。我如何将此与Reduce一起使用


我的理解是从?还原,还原比较第一和第二个元素。因为1<2返回1。它将重用1,然后将其与第三个元素进行比较,依此类推。这意味着您将始终比较1
head(y,-1) < tail(y, -1)

我的理解是从?还原,还原比较第一和第二个元素。因为1<2返回1。它将重用1,然后将其与第三个元素进行比较,依此类推。这意味着您将始终比较1
head(y,-1) < tail(y, -1)

我不认为它可以被使用,因为Reduce通常会以类似ffx[1],x[2],x[3]的形式结束,所以您对第三个元素的比较将是真的<3


对于这个问题来说,这似乎是一个更有效的解决方案。

我不认为它可以用作Reduce,因为Reduce通常会以类似ffx[1],x[2],x[3]的形式结束,所以您对第三个元素的比较将是正确的<3

对于这个问题来说,这似乎是一个更有效的解决方案。

在这里,diff函数将是一个合乎逻辑的选择。其他人已经很好地解释了为什么Reduce不合适。它已经设置为比较向量元素之间的差异,并且已经矢量化

> !diff(y) < 0
[1]  TRUE  TRUE FALSE  TRUE  TRUE
在这里,diff函数将是一个合乎逻辑的选择,其他人已经很好地解释了为什么Reduce不合适。它已经设置为比较向量元素之间的差异,并且已经矢量化

> !diff(y) < 0
[1]  TRUE  TRUE FALSE  TRUE  TRUE

绝望地无聊?我是:

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

绝望地无聊?我是:

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


我不认为它可以被使用,因为Reduce通常会以类似ffx[1],x[2],x[3]的形式结束,所以您对第三个元素的比较将是真的<3。同样地,sorty似乎是这个问题最有效的解决方案。@James,你能把它作为一个解决方案吗?或者我们可以走最困难的路线,在一阶导数中寻找负面符号:-@CarlWitthoft,正如Gavin的回答所示,我认为这可能是最干净/最简单的解决方案。我不认为它可以用作Reduce will一般的结果是ffx[1]、x[2]、x[3],因此第三个元素的比较结果为TRUE<3。同样,sorty似乎是这个问题最有效的解决方案。@James,你能把它作为一个解决方案吗?或者我们可以走最困难的路线,在一阶导数中寻找负面符号:-@CarlWitthoft,正如Gavin的回答所示,我认为这可能是最干净/最简单的解决方案。不,排序不是最有效的。。。如果要检查向量是否是单调的,alldiffy>=0或更好的ally==cummaxy更有效。请看@flodel Nice,我将对其进行编辑以提高效率。您想添加您的评论作为备选答案吗?谢谢James。泰勒想要一个关于Reduce的答案,所以我认为在评论中添加一个链接就足够了。不,排序不是最有效的。。。如果要检查向量是否是单调的,alldiffy>=0或更好的ally==cummaxy更有效。请看@flodel Nice,我将对其进行编辑以提高效率。您想添加您的评论作为备选答案吗?谢谢James。泰勒想要一个关于Reduce的答案,所以我认为在评论中添加一个链接就足够了。无聊竞赛+1.现在我要写一个函数,做样条拟合,计算一阶导数。在别人的评论之后,我认为这是不可能的。谢谢你告诉我Reduce不是做这项工作的最佳工具。这回答了我关于减少的问题。@TylerRinker,作为,不是问是否,而是问如何减少;也许是为什么?这也是一个很好的问题,它最终将引导您使用其他建议的方法之一,而不是像下面的答案那样使用暴力!无聊竞赛+1.现在我要写一个函数,做样条拟合,计算一阶导数。在别人的评论之后,我认为这是不可能的。谢谢你告诉我Reduce不是做这项工作的最佳工具。这回答了我关于减少的问题。@TylerRinker,作为,不是问是否,而是问如何减少;也许是为什么?这也是一个很好的问题,它最终将引导您使用其他建议的方法之一,而不是像下面的答案那样使用暴力!可能是最快的方法,也可能是最少的代码量+1可能是最快的方法,也可能是最少的代码量+1.