创建一个函数,提供与 R 中的 lapply 相同的结果
create a function providing the same result as lapply in R
我想分析lapply函数在R中的效率,但是在文件夹"base"中没有找到lapply的原始开发代码,所以我自己写了一个简单的代码。
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"
我想知道如何将 "general function name" 输入到一个函数中,这样我就可以 运行 在 new_lapply 函数中使用不同的函数,类似于内置的 lapply()。
非常感谢。
你应该使用 match.fun()
。我也做了一些其他的改变。希望这能让你朝着正确的方向前进。此外,lapply()
及其效率 here
也有很好的解释
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
我想分析lapply函数在R中的效率,但是在文件夹"base"中没有找到lapply的原始开发代码,所以我自己写了一个简单的代码。
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"
我想知道如何将 "general function name" 输入到一个函数中,这样我就可以 运行 在 new_lapply 函数中使用不同的函数,类似于内置的 lapply()。
非常感谢。
你应该使用 match.fun()
。我也做了一些其他的改变。希望这能让你朝着正确的方向前进。此外,lapply()
及其效率 here
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