如何使用tidyverse语法优化R中遍历dataframe生成DAG字符串的代码
用tidyverse实现更高效的DAG字符串转换函数
示例测试数据
df <- tibble( v = c("d", "d", "f", "q"), w = c("f", "a", "a", "a"), e = c("--", "->", "->", "->") )
优化后tidyverse实现
library(tidyverse) convert_dag_tidy <- function(df, target_v, target_w, new_e) { df %>% # 匹配指定v、w的行替换连接符,其余行沿用原有连接符 mutate(use_e = if_else(v == target_v & w == target_w, new_e, e)) %>% # 拼接每行的边字符串 mutate(edge_str = paste(v, use_e, w)) %>% # 提取所有边字符串 pull(edge_str) %>% # 拼接所有边为一个长字符串 paste(collapse = " ") %>% # 套上dag格式外层 paste0("dag{ ", ., " }") }
调用示例
执行convert_dag_tidy(df, 'd', 'f', '->')即可得到和原函数完全一致的输出:"dag{ d -> f d -> a f -> a q -> a }"
实现优势
- 采用向量化运算替代逐行for循环,数据量越大,执行效率提升越明显
- 代码逻辑分层清晰,可读性和可维护性更高
- 参数命名和原数据列名做了区分,避免命名冲突导致的隐性错误
内容的提问来源于stack exchange,提问作者Eisen
相关产品推荐
相关产品推荐

