【发布时间】:2014-05-19 23:11:43
【问题描述】:
所以我是 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(或它的任何版本)来替换上面的示例代码?
【问题讨论】:
-
针对您的具体示例,如果您可以包含列表示例,可能会有所帮助。另外,也许这篇最近的博客文章很有用:r-bloggers.com/functional-programming-in-r(稍后会查看 for 循环)
-
您正在调用这两个“列表”,但您正在对它们进行子集化,就好像它们是向量一样。在问 R 问题时请注意这一点。 “列表”是指特定的东西,通常不同于 R 中的“向量”或“原子向量”。
-
...只是猜测,我认为您根本不需要应用功能。尝试运行
outer(1:5,1:5,FUN = "=="),看看这对您是否更有意义。
标签: r performance for-loop nested apply