我想创建这个函数:
densidad<-function(x){
Epa(x,xis[1])+Epa(x,xis[2])+
Epa(x,xis[3])+Epa(x,xis[4])+
Epa(x,xis[5])
}但我想知道是否有一种方法可以不写所有的总和,而是使用apply家族成员。此函数来自以下代码:
# Creemos una función que nos arroje un Kernel de Epanechnikov:
Epa<-function(x,xi,h=0.8){
y <- ifelse(xi-h < x & x < xi+h,
(3/4)*(1-((x-xi)/h)^2)*(1/h),
0)
return(y)
}
# Queremos utilizarla para muchas xi's
aux<-function(xi,Add,Col){
curve(Epa(x,xi=xi),
from=-5,to=5,
lwd=2,
add = Add,col=Col)
}
aux(0,F,"darkblue")
# Usemos una entidad apply nueva. El objetivo será aplicar
# la función anterior a estos puntos:
xis=c(0,0.5,-2.5,1,2)
# Con estos parámetros respectivamente:
Adds=c(F,T,T,T,T)
Cols=rainbow(5)
mapply(aux, # Aplica esta función
# Con los siguientes parámetros para la
xis, # primera entrada.
Adds, # segunda entrada.
Cols) # tercera entrada.
densidad<-function(x){
Epa(x,xis[1])+Epa(x,xis[2])+
Epa(x,xis[3])+Epa(x,xis[4])+
Epa(x,xis[5])
}
curve(densidad(x),from=-5,to=5,lwd=2)
mapply(aux, # Aplica esta función
# Con los siguientes parámetros para la
xis, # primera entrada.
rep(T,5), # segunda entrada.
Cols) # tercera entrada.那我能做什么呢?
发布于 2020-06-20 13:33:54
您只需使用lapply将每个值存储在列表中,然后取消列出它们并对结果求和即可。
output <- sum(unlist(lapply(list(xis), function(i) Epa(x, i)))或者,您可以重写densidad函数以接受向量或列表。
densidad <- function(x, xis){
y <- 0
for (n in xis){
y <- y + Epa(x, n)
}
return(y)
}https://stackoverflow.com/questions/62481383
复制相似问题