在R中向量化'deparse(substitute(d))'吗?

时间:2018-05-14 18:08:24

标签: r function

我想知道为什么,在运行我的下方时使用:bb(d = c(dnorm, dcauchy) )我收到错误消息:object 'c(dnorm, dcauchy)' not found

P.S。但正如我在下面所示,该功能对bb(d = c(dnorm))没有任何问题。

bb <- function(d){

 d <- if(is.character(d)) d else deparse(substitute(d))

  h <- numeric(length(d))
for(i in 1:length(d)){
  h[i] <- get(d[i])(1)  ## is there something about `get` that I'm missing?
    }
  h
}
# Two Examples of Use:
bb(d = dnorm)                # Works OK 
bb(d = c(dnorm, dcauchy) )   # Error: object 'c(dnorm, dcauchy)' not found

# But if you run:
bb(d = c("dnorm", "dcauchy"))# Works OK

1 个答案:

答案 0 :(得分:2)

尝试将此功能直接传递给您的功能

bb <- function(d){
  if (!is.list(d)) d <- list(d)
  sapply(d, function(x) x(1))  
}

bb(d = list(dnorm, dcauchy))
bb(d = dnorm)

c()函数用于组合向量,它不是魔术&#34;数组&#34;功能或任何东西。如果你有简单原子类型的集合,你可以用c()加入它们,但对于像函数这样的更复杂的对象,你需要在列表中收集它们,而不是向量。