首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个函数,提供与R中的lapply相同的结果

创建一个函数,提供与R中的lapply相同的结果
EN

Stack Overflow用户
提问于 2015-04-10 22:38:39
回答 1查看 85关注 0票数 2

我试图在R中分析lapply函数的效率,但是我在文件夹"base“中没有找到lapply的原始开发代码,所以我自己编写了一个简单的代码。

代码语言:javascript
复制
new_lapply<-function(data,f_name){
  list<-list()
  for (i in length(data)){
   list[i]<-f_name(data[,i])
  }
  return (list)
}
check<-Boston[1:10,]
lapply(check,length)

new_lapply(check,length)

Error: could not find function "f_name"

我想知道如何在函数中输入一个“通用函数名”,这样我就可以在new_lapply函数中运行不同的函数,类似于内置的lapply()。

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-10 23:01:41

您应该使用match.fun()。我也做了一些其他的改变。希望这能让你走上正确的方向。此外,对lapply()及其效率这里也有一个很好的解释

代码语言:javascript
复制
new_lapply <- function(data, f_name) {
    ## match the function in the 'f_name' argument
    f_name <- match.fun(f_name)
    ## allocate a list the same length as 'data' (ncol for data frames)
    List <- vector("list", length(data))
    for (i in seq_along(data)) {
        List[[i]] <- f_name(data[[i]])
    }
    ## if 'data' has names, carry them over to 'List' 
    if(!is.null(names(data))) 
        names(List) <- names(data)
    List
}

identical(lapply(mtcars, length), new_lapply(mtcars, length))
# [1] TRUE

um <- unname(mtcars)
identical(lapply(um, length), new_lapply(um, length))
# [1] TRUE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29571725

复制
相关文章

相似问题

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