问题描述
我正在寻找另一种方法来获得相同的结果,因为for语句太慢了。
我有以下数据框。
'data.frame': 50000 obs. of 2 variables:
$ user_id: chr "[email protected]" "[email protected]" ......
$ result : logi NA NA ......
f <- function(user_id){
......
return(json_result)
}
我想要的结果如下。
'data.frame': 50000 obs. of 2 variables:
$ user_id: chr "[email protected]" "[email protected]" ......
$ result : chr "{....}" "{....}" ......
我正在运行类似以下代码的循环,但是速度太慢。
for (t in df$user_id) {
print(t)
df$result[df$user_id==t] <- f(t)
}
每个用户大约需要3秒,而获得50,000个用户则需要3 * 50000秒。
还有其他方法可以更快地获得结果吗?
解决方法
您正在寻找lapply
函数:
df$result <- lapply(df$user_id,f)
,
或者,您可以使用purrr的地图函数。
library(tidyverse)
purrr::map(df$user_id,f)
这将输出一个列表,其中每个元素都是函数调用的输出。根据函数的输出,可以使用map
变体来输出某种类型的向量。您可以在文档中阅读以下内容:https://purrr.tidyverse.org/reference/map.html