用sapply()理解R卷积码
我试图在以下方面分解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)
我的问题是:
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" )