用sapply()理解R卷积码

用sapply()理解R卷积码,r,convolution,sapply,R,Convolution,Sapply,我试图在以下方面分解R代码: 我的问题是: 《准则》的目的是什么;q} 在sapply()内结束。 它与 《准则》的目的是什么;q} 在sapply()内结束。 中的函数非常有用返回q,但实际上并不需要它。以下功能的工作原理相同 convolve.binomial <- function(p) { n <- length(p) + 1 z <- c(1, rep(0, n-1)) sapply(p, function(q) {z <<- (1 - q)

我试图在以下方面分解R代码:


我的问题是:

  • 《准则》的目的是什么;q} 在
    sapply()内结束。
  • 它与
    
    
  • 《准则》的目的是什么;q}
  • sapply()内结束。
  • 中的函数非常有用
    返回
    q
    ,但实际上并不需要它。以下功能的工作原理相同

    convolve.binomial <- function(p) {
      n <- length(p) + 1
      z <- c(1, rep(0, n-1))
      sapply(p, function(q) {z <<- (1 - q) * z + q * (c(0, z[-n]))})
      z
    }
    
    卷积二项式
    
  • 《准则》的目的是什么;q}
  • sapply()内结束。
    中的函数非常有用
    返回
    q
    ,但实际上并不需要它。以下功能的工作原理相同

    convolve.binomial <- function(p) {
      n <- length(p) + 1
      z <- c(1, rep(0, n-1))
      sapply(p, function(q) {z <<- (1 - q) * z + q * (c(0, z[-n]))})
      z
    }
    

    convolve.binomial如果希望在函数执行过程中看到z的中间值,请在下面的代码中插入
    cat
    print
    命令:

    sapply(x, function(x) {z <<- (1 - x) * z + x * (c(0, z[-n])); cat(z,"\n"); x})
    #--------
    0.83 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0.4482 0.4736 0.0782 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0.170316 0.457852 0.323348 0.048484 0 0 0 0 0 0 0 0 0 0 0 0 
    0.1566907 0.4348491 0.3341083 0.07047312 0.00387872 0 0 0 0 0 0 0 0 0 0 0 
    0.09401443 0.3235858 0.3744046 0.1759272 0.03051648 0.001551488 0 0 0 0 0 0 0 0 0 0 
    0.02256346 0.1491116 0.3357823 0.3267701 0.1410286 0.02356488 0.001179131 0 0 0 0 0 0 0 0 0 
    snipped rest of output
    

    sapply(x,函数(x){z如果您希望在函数运行时看到z的中间值,请在下面的代码中插入
    cat
    print
    命令:

    sapply(x, function(x) {z <<- (1 - x) * z + x * (c(0, z[-n])); cat(z,"\n"); x})
    #--------
    0.83 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0.4482 0.4736 0.0782 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0.170316 0.457852 0.323348 0.048484 0 0 0 0 0 0 0 0 0 0 0 0 
    0.1566907 0.4348491 0.3341083 0.07047312 0.00387872 0 0 0 0 0 0 0 0 0 0 0 
    0.09401443 0.3235858 0.3744046 0.1759272 0.03051648 0.001551488 0 0 0 0 0 0 0 0 0 0 
    0.02256346 0.1491116 0.3357823 0.3267701 0.1410286 0.02356488 0.001179131 0 0 0 0 0 0 0 0 0 
    snipped rest of output
    

    sapply(x,函数(x){z如果没有
    return
    语句,r将返回上一次求值的结果。因此,函数的效用似乎是3倍的。在全局范围内声明
    z
    ,计算
    z
    ,然后将输入
    q
    作为返回值返回,可能只是为了帮助调试,也可能是为了p将其分配给另一个函数。
    z
    变量既是中间结果的集合存储,又是将注意力集中在该x变量的下一个位置的移位运算符。@42-您能详细说明在更简单的情况下会发生什么操作吗,例如,
    x我将发布我认为信息更丰富的方法调试/了解正在发生的事情。如果没有
    return
    语句,r将返回上一次求值的结果。因此,函数的效用似乎是3倍的。要在全局范围内声明
    z
    ,计算
    z
    ,然后将输入
    q
    作为返回值返回,可以e只是为了帮助调试或将其传递给另一个函数。
    z
    变量既是中间结果的集合存储,又是将注意力集中在该x变量的下一个位置的移位运算符。@42-您能详细说明在更简单的情况下会发生什么操作吗,例如,
    x我将发布w我认为hat是调试/了解正在发生的事情的一种信息更丰富的方法。您能详细说明此调用内部工作的前几步吗?您能详细说明此调用内部工作的前几步吗?
    
    sapply(x, function(x) {z <<- (1 - x) * z + x * (c(0, z[-n])); cat(z,"\n"); x})
    #--------
    0.83 0.17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0.4482 0.4736 0.0782 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0.170316 0.457852 0.323348 0.048484 0 0 0 0 0 0 0 0 0 0 0 0 
    0.1566907 0.4348491 0.3341083 0.07047312 0.00387872 0 0 0 0 0 0 0 0 0 0 0 
    0.09401443 0.3235858 0.3744046 0.1759272 0.03051648 0.001551488 0 0 0 0 0 0 0 0 0 0 
    0.02256346 0.1491116 0.3357823 0.3267701 0.1410286 0.02356488 0.001179131 0 0 0 0 0 0 0 0 0 
    snipped rest of output
    
    plot(x)
    lines(seq(length(z)), z)
    z2 <- convolve.binomial(sample(x) )
    lines(seq(length(z)), z2, col="red" )
    z3 <- convolve.binomial(sample(x) )
    lines(seq(length(z)), z3, col="blue" )