楼主: deephilla
2350 5

[问答] R语言中检查圆括号配对程序的问题,高手帮忙 [推广有奖]

  • 0关注
  • 0粉丝

大专生

30%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
488 点
帖子
48
精华
0
在线时间
49 小时
注册时间
2016-10-30
最后登录
2021-8-16

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
R 的查错功能太差,不能正确的给出建议。很多人为这个圆括号问题,伤透了心。如帖子 http://muchong.com/bbs/viewthread.php?tid=10985746&fpage=1 。
我想编一个 能检查括号的程序,发现中间的问题多多啊 。

我的思路是先找括号,将其类型、位置记录下来。再配对,记录其配对的顺序。最后画个图,简单直观,看着方便检查。
字符串的位置,坐标轴x正好对应字符的位置。
前面的配对程序也做好了,但是画图后,这个字符串和上面的连线没有办法对齐。R不像其它语言,图片的大小可以定死,文字的大小也能定死。R吧,图片大小它自动调节,不容易对齐。
QQ图片20170610002840.png
还有字符的像素宽度也不一样,也是问题,不好解决。

我就想了新办法,把字符串用 strsplit()  弄成单个字符存放,然后再用text() 放在坐标轴上相应的位置,结果出现讨厌的引号。
QQ截图20170610003607.png
这引号如何去除呢?

希望高手帮忙!
做出来后和大家共享。



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:R语言 thread split Chong 自动调节 查错 圆括号 字符 双引号

沙发
jiangbeilu 学生认证  发表于 2017-6-10 10:41:22 |只看作者 |坛友微信交流群
给你一下查找配对括号的函数吧:
  1. xx <- "for i=46:60dY(i)=(E5(i-45,1)*Y(46)+E5(i-45,2)*Y(47)+E5(i-45,3)*Y(48)+E5(i-45,4)*Y(49)+E5(i-45,5)*Y(50)+E5(i-45,6)*Y(51)+E5(i-45,7)*Y(52)+E5(i-45,8)*Y(53)+E5(i-45,9)*Y(54)+E5(i-45,10)*Y(55)+E5(i-45,11)*Y(56)+E5(i-45,12)*Y(57)+E5(i-45,13)*Y(58)+E5(i-45,14)*Y(59)+E5(i-45,15)*Y(60))...
  2.        +(E6(i-45,1)*Y(16)+E6(i-45,2)*Y(17)+E6(i-45,3)*Y(18)+E6(i-45,4)*Y(19)+E6(i-45,5)*Y(20)+E6(i-45,6)*Y(21)+E6(i-45,7)*Y(22)+E6(i-45,8)*Y(23)+E6(i-45,9)*Y(24)+E6(i-45,10)*Y(25)+E6(i-45,11)*Y(26)+E6(i-45,12)*Y(27)+E6(i-45,13)*Y(28)+E6(i-45,14)*Y(29)+E6(i-45,15)*Y(30))...
  3.       *(A11(i-45,1)*Y(1)+A11(i-45,2)*Y(2)+A11(i-45,3)*Y(3)+A11(i-45,4)*Y(4)+A11(i-45,5)*Y(5)+A11(i-45,6)*Y(6)+A11(i-45,7)*Y(7)+A11(i-45,8)*Y(8)+A11(i-45,9)*Y(9)+A11(i-45,10)*Y(10)+A11(i-45,11)*Y(11)+A11(i-45,12)*Y(12)+A11(i-45,13)*Y(13)+A11(i-45,14)*Y(14)+A11(i-45,15)*Y(15))...
  4.      +(E6(i-45,1)*Y(1)+E6(i-45,2)*Y(2)+E6(i-45,3)*Y(3)+E6(i-45,4)*Y(4)+E6(i-45,5)*Y(5)+E6(i-45,6)*Y(6)+E6(i-45,7)*Y(7)+E6(i-45,8)*Y(8)+E6(i-45,9)*Y(9)+E6(i-45,10)*Y(10)+E6(i-45,11)*Y(11)+E6(i-45,12)*Y(12)+E6(i-45,13)*Y(13)+E6(i-45,14)*Y(14+E6(i-45,15)*Y(15))...
  5.      *(A11(i-45,1)*Y(16)+A11(i-45,2)*Y(17)+A11(i-45,3)*Y(18)+A11(i-45,4)*Y(19)+A11(i-45,5)*Y(20)+A11(i-45,6)*Y(21)+A11(i-45,7)*Y(22)+A11(i-45,8)*Y(23)+A11(i-45,9)*Y(24)+A11(i-45,10)*Y(25)+A11(i-45,11)*Y(26)+A11(i-45,12)*Y(27)+A11(i-45,13)*Y(28)+A11(i-45,14)*Y(29)+A11(i-45,15)*Y(30));"

  6. library(stringr)
  7. left_bracket_index <- str_locate_all(xx,"\\(")[[1]][,1]
  8. left_bracket <- data.frame(location=left_bracket_index,symbol=1)
  9. right_bracket_index <- str_locate_all(xx,"\\)")[[1]][,1]
  10. right_bracket <- data.frame(location=right_bracket_index,symbol=2)
  11. df <- rbind(left_bracket,right_bracket)

  12. find_match_bracket <- function(df){
  13.     cc <- df[order(df[,1]),]
  14.     match_bracket <- sort(c(which(diff(cc[,2],1)==1),which(diff(cc[,2],1)==1)+1))
  15.     not_match <- cc[-match_bracket,]
  16.         return(not_match)
  17. }
  18. df1 <- find_match_bracket(df)
  19. df2 <- find_match_bracket(df1)
复制代码

重复find_match_bracket就可以了

使用道具

藤椅
deephilla 发表于 2017-6-10 20:01:13 |只看作者 |坛友微信交流群
谢谢  jiangbeilu  这个程序,我已经弄出来了。
关键是现在如何展示,我想画出图来,和文字对应上有问题,有没有人解决上面的第二问题,如何去除引号。

使用道具

板凳
jiangbeilu 学生认证  发表于 2017-6-11 09:05:39 |只看作者 |坛友微信交流群
deephilla 发表于 2017-6-10 20:01
谢谢  jiangbeilu  这个程序,我已经弄出来了。
关键是现在如何展示,我想画出图来,和文字对应上有问题, ...
你上传一下数据和代码吧,因为我自己replicate你的程序也需要时间,还不一定做出来跟你一样的样子

使用道具

报纸
deephilla 发表于 2017-6-11 21:48:51 |只看作者 |坛友微信交流群
程序有200多行,我用附件上传。将后缀.txt  改为.R 即可。
谢谢各位帮忙。我觉得弄好了,都可以用是 个好事。
各位帮忙。

分析字符串中括号配对03 - 副本.txt

5.37 KB

全部程序

使用道具

地板
deephilla 发表于 2017-6-23 00:06:02 |只看作者 |坛友微信交流群
怎么没有人来了呢

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 16:52