R语言分析程序代码中变量与函数间的关系(以python代码为例)

本文介绍了一种使用R语言的tidyverse和datatable包来自动解析和整理Python代码的方法,通过该方法可以清晰地展示代码中的变量和函数关系,并最终生成便于分析的数据表格。

学习别人写的代码,满眼的变量、函数和常量,很容易搞混,试着用R的 tidyversedatatable自动梳理代码中的变量和函数,最终生成二维数据,用关系图类的包后单独的关系图软件出图。

1、原代码图样(python)

在这里插入图片描述

2、R语言清理代码

library(tidyverse)
library(data.table)
mydt <- read_csv("mydt.csv")
names(mydt) <- 'a'
setDT(mydt)
# 去除原文注释
mydt$a <- str_remove(mydt$a,"#.+")
# 删除空行
mydt <- mydt[a!='']
# 删除条件判断,避免干扰后面用'='分列
pt <- str_detect(mydt$a,"(==)|(!=)|(>=)|(<=)")
mydt <- mydt[!pt]
# 因为只关注变量间的关系,所以只保留赋值类语句
pt <- str_detect(mydt$a,"=")
mydt <- mydt[pt]

# 去除元组、列表、数字赋值、字符串赋值
pt <- str_detect(mydt$a,"(\\= [0-9]+)|(\\= ')|(\\= \\[)|(\\= \\([0-9]+)")
mydt[pt]
mydt <- mydt[!pt]

#去除标记变量
pt <- str_detect(mydt$a,"(\\= True)|(\\= False)")
mydt <- mydt[!pt]
# 分列
tmp <- str_split(mydt$a,"=",simplify = TRUE)
mydt$v <- tmp[,1] %>% str_trim()
mydt$r <- tmp[,2] %>% str_trim()

# 拆分V列中多个变量在同一行
pt <- str_detect(mydt$v,"\\,")
tmp <- mydt[pt]
mydt <- mydt[!pt]
# 因为本例中只有两个,就不费劲写循环了
str_count(tmp$v,"\\,")
# [1] 1 1 1 1 1 1 1 1 1 1 1 1 1
ta <- tmp
ta$v <- str_trim(str_remove(tmp$v,"\\w+\\,"))
tb <- tmp
tb$v <- str_trim(str_remove(tmp$v,"\\,.+"))
(tt <- rbind(ta,tb))
# 更新mydt
mydt <- rbind(mydt,tt)
# 将函数放到单独一列
mydt[,p:=str_extract(r,".+?\\(")]
mydt[,q:=str_remove(r,".+?\\(")]
# 将算术运算符替换为“,”,方便分列
mydt[,q:=str_replace_all(q,"\\*|\\+|\\-",",")]
#去掉括号
mydt[,q:=str_replace_all(q,"\\(|\\)","")]
mydt[,p:=str_replace_all(p,"\\(|\\)","")]
# 分列并更新
tmp <- str_split(mydt$q,",",simplify = TRUE) %>% as.data.frame() %>% setDT()
mydt <- cbind(mydt,tmp)
mydt <- mydt[,c("v","p","V1","V2","V3","V4","V5","V6","V7")]
# 宽数据变长数据
mydt <- pivot_longer(mydt,cols = 3:9,names_to = "A",values_to = "b") %>% unique()
setDT(mydt)
mydt <- mydt[!b==""]
mydt <- mydt[!is.na(p)]
write.csv(mydt,"mydt.csv")

3、出图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值