首页 > 解决方案 > 在 R 中转换为 lapply - 带有附加 tibble 的 for 循环

问题描述

我试图通过首先将循环转换为 lapply 来并行化这个 for 循环。

sent 是一个大约 20,000,000 行的 tibble

for 循环使用索引 i 遍历已发送的每一行。如果满足两个条件,则将 31 行(从 i-15 到 i+15)切片并附加到另一个 tibble(femaleWindow 或 maleWindow)。

您对如何将其转换为 lapply/并行化 for 循环以节省时间有任何提示吗?

for (i in seq_len(nrow(sent)))
{
    if(i>15){h=i-15} else{h=1}
    j=i+15
    cut <- slice(sent,i) 

    if (cut[1,5]=="yes")
    {
        window <- slice(sent, h:j)
        leadcut <- window %>% filter(leader=="yes")
        x = fleadcut[1,4] %>% replace_na(list(leader="none"))
        if(x =="yes")
        {
            femaleWindow <- bind_rows(femaleWindow, window)
        }  
    } else if (cut[1,5]=="no")
    {
        window <- slice(sent, h:j)
        leadcut <- window %>% filter(leader=="yes")
        x = leadcut[1,4] %>% replace_na(list(leader="none"))
        if(x =="yes")
        {
            maleWindow <- bind_rows(maleWindow, window)
        }  
    } else{print(i)}
}

谢谢!

标签: rloopsparallel-processinglapplytibble

解决方案


推荐阅读