Может ли кто-нибудь из членов семьи подать заявку на это в R? - PullRequest
1 голос
/ 20 июня 2020

Я хотел бы создать эту функцию:

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.

Что мне тогда делать?

1 Ответ

0 голосов
/ 20 июня 2020

Вы можете просто использовать 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)
}
...