首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中有没有可以这样做的apply系列成员?

在R中有没有可以这样做的apply系列成员?
EN

Stack Overflow用户
提问于 2020-06-20 11:47:44
回答 1查看 40关注 0票数 1

我想创建这个函数:

代码语言:javascript
复制
densidad<-function(x){
  Epa(x,xis[1])+Epa(x,xis[2])+
  Epa(x,xis[3])+Epa(x,xis[4])+
  Epa(x,xis[5])
}

但我想知道是否有一种方法可以不写所有的总和,而是使用apply家族成员。此函数来自以下代码:

代码语言:javascript
复制
# 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.

那我能做什么呢?

EN

回答 1

Stack Overflow用户

发布于 2020-06-20 13:33:54

您只需使用lapply将每个值存储在列表中,然后取消列出它们并对结果求和即可。

代码语言:javascript
复制
output <- sum(unlist(lapply(list(xis), function(i) Epa(x, i)))

或者,您可以重写densidad函数以接受向量或列表。

代码语言:javascript
复制
densidad <- function(x, xis){
  y <- 0
  for (n in xis){
      y <- y + Epa(x, n)
  }
  return(y)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62481383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档