因此,我是R的新手(我来自Python背景),在理解如何/何时实现apply函数(lapply,sapply,rapply等)而不是嵌套循环方面,我仍然遇到一些问题。

例如,假设您想执行一些功能FUN,将列表中的每个元素与另一个列表中的每个元素进行比较。我会写一些类似的东西:

n = 1
m = 1
sameList = NULL
for(i in 1:length(list1)){
    for(j in 1:length(list2)){
        if(list1[n]==list2[m]){
            sameList<-c(sameList, list1[n]}
    n = n+1
    }
m = m+1
}

换句话说,一些嵌套循环在每个列表的每个元素上进行迭代。

我正在学习的是,在R中连接列表中循环是一个非常低效的过程,这就是为什么使用apply的原因。

那么,如何用apply(或它的任何版本)替换上面的示例代码?

最佳答案

要使用lapply,您可以运行:

sameList = lapply(list1, function(x) lapply(list2, function(y) if (x==y) x else NULL))

10-08 07:12