使用vapply返回闭包

时间:2014-08-19 13:04:31

标签: r

如果我有一个函数发生器,即

prepend_text = function(text) {
  function(x) {
    paste(text, x)
  }
}

是否可以使用vapply返回结果函数的向量?我不知道如何指定closure的返回类型为vapply。

vapply(c('one', 'two', 'three'), FUN.VALUE=???, prepend_text)

使用任何其他值character(1)等。产量

# Error in vapply(c('one', 'two', 'three'),  :
#   values must be type 'character',
#  but FUN(X[[1]]) result is type 'closure'

我认为这可能是不可能的,并且使用sapply实际上会返回我想要的内容,所以这个问题主要是学术性的。

我正在寻找的输出也包含每个函数的名称,因此简单的lapply调用也不起作用。

预期输出相当于

c(one=prepend_text('one'), two=prepend_text('two'), three=prepend_text('three'))

2 个答案:

答案 0 :(得分:2)

vapply不会返回功能,但lapply会。如果要添加名称,可以在输入对象上设置它们:

x <- c('one', 'two', 'three')
names(x) <- x
lapply(x, prepend_text)

答案 1 :(得分:1)

我建议在这些情况下使用lapply。

你能试试吗?

lapply(list('one', 'two', 'three'), prepend_text)
祝你好运!