首页 > 解决方案 > 如何在没有for循环的情况下获得相同的结果?

问题描述

我正在寻找另一种方法来实现相同的结果,因为 for 语句太慢了。

我有以下数据框。

'data.frame':   50000 obs. of  2 variables:
$ user_id: chr  "user1@test.com" "user2@test.com" ......
$ result : logi  NA NA ......

函数 f 接受一个用户 ID 并返回一个特定的结果。

f <- function(user_id){
 ......
 return(json_result)
}

我想要的结果如下。

'data.frame':   50000 obs. of  2 variables:
$ user_id: chr  "user1@test.com" "user2@test.com" ......
$ result : chr  "{....}" "{....}" ......

我正在像下面的代码一样运行一个循环,但是速度太慢了。

for (t in df$user_id) {
 print(t)
 df$result[df$user_id==t] <- f(t) 
}

每个用户大约需要 3 秒,3*50000 秒总共获得 50,000 个用户。

有没有其他方法可以更快地获得结果?

标签: rdataframefor-loop

解决方案


或者,您可以使用 purrr 的地图功能。

library(tidyverse)
purrr::map(df$user_id, f)

这将输出一个列表,其中每个元素都是函数调用的输出。根据函数的输出,您可以使用map变体来输出某种类型的向量。您可以在文档中阅读相关内容:https ://purrr.tidyverse.org/reference/map.html


推荐阅读