【问题标题】:Apply function of two elements应用两个元素的函数
【发布时间】:2018-11-26 09:53:23
【问题描述】:

假设我有一个大小为 n 的向量 x_n,我想对除第一个元素之外的每个元素应用一个函数,这取决于前一个元素 f(x_i, x_(i-1)),如何这可以不循环完成吗?

【问题讨论】:

  • 我们可以提供更多信息吗?
  • 请注意,大多数时候“不循环”只是一个在其中隐藏循环的函数。一个可重现的示例将有助于我们更好地理解。
  • 如果f是矢量化的,可能是f(x[-1L], x[-length(x)])?

标签: r loops apply


【解决方案1】:

这个呢?但正如@RLave 所指出的,*apply 只是变相的循环:

my_fun<- function(i, x) {
    if(i == 1){
        return(x[i])
    } else {
        return(x[i] + x[i-1])
    }
}

x_n<- c(10, 20, 30, 40 ,50)

sapply(1:length(x_n), my_fun, x_n)
[1] 10 30 50 70 90

【讨论】:

  • 那么使用apply就没有性能优势了吗?使用时没有任何预编译?
  • @ClaudioP 不,我认为没有太多优势。另见stackoverflow.com/questions/42393658/… 基本上,使用*apply 的主要原因是可读性而不是速度。
  • 我确实在使用 sum 或 prod 而不是循环方面获得了优势,或者即使对于那些也是错误的?
  • 你能举个例子吗?
  • 我猜我们是 ot,但是 sum(x) 和 for(i in 1:length(x)){o=o+x[i]} 之间有什么区别?,我猜那 sum 是一个已经编译的 C 函数,所以应该更快。
猜你喜欢
  • 2013-01-21
  • 2016-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2016-05-23
相关资源
最近更新 更多