很容易构建一个高斯核函数,以便它可以处理向量输入:
K_gaussian <- function(x){return(1/sqrt(2*pi)*(exp(-0.5*x*x)))}
K_gaussian(seq(-1,1,0.5))
# [1] 0.2419707 0.3520653 0.3989423 0.3520653 0.2419707
但是当我尝试编码时遇到了麻烦,例如,一个 Epanechnikov 内核:
K_ep <- function(x){if(abs(x)>1){return(0)} else{return(3/4*(1-x*x))}}
因为 if 语句把事情搞砸了。例如,以下 不提供向量输出 :
K_ep(seq(-2,2,0.25))
# [1] 0
Warning message:
In if (abs(x) > 1) { :
the condition has length > 1 and only the first element will be used
我该如何解决这个问题?
最佳答案
使用 ifelse
:
K_ep2 <- function(x){ifelse(abs(x)>1, 0, 3/4*(1-x*x))}
K_ep2(seq(-2,2,0.25))
[1] 0.000000 0.000000 0.000000 0.000000 0.000000 0.328125 0.562500 0.703125 0.750000 0.703125 0.562500 0.328125 0.000000 0.000000 0.000000
[16] 0.000000 0.000000
关于r - R中的向量化核函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23912500/