用lapply替换循环

时间:2019-02-12 16:21:15

标签: r

是否可以这样替换for循环:

public TEntity GetById(object id){
    var entity = connection.Get<TEntity>(id);

    if (entity is ITranslatable t)
    {
        t.Translator = _translationService;
    }

    return entity;
}

使用lapply或其他方法来减少执行时间?

1 个答案:

答案 0 :(得分:1)

构建数据帧列表并在循环外rbind 一次,并避免在循环内使用rbind进行二次复制:

df_list <- lapply(df$text, function(txt) {
               out <- liwcalike(txt, dictionary = data_dictionary_NRC)
               return(data.frame(em1 = out$trust, em2= out$anger, origin=txt))
           }

final_df <- do.call(rbind, df_list)

如果liwcalike调用出现任何问题,请在tryCatch中包装过程以在发生任何错误时返回NA行数据帧:

df_list <- lapply(df$text, function(txt) {
               tryCatch({
                   out <- liwcalike(txt, dictionary = data_dictionary_NRC)
                   return(data.frame(em1=out$trust, em2=out$anger, origin=txt, error=NA))
               }, error = function(e) 
                   data.frame(em1=NA, em2=NA, origin=txt, error=e)
               )
           }

final_df <- do.call(rbind, df_list)