楼主: EveIOU
2456 14

[问答] for循环问题,求朋友们指点 [推广有奖]

  • 1关注
  • 0粉丝

博士生

2%

还不是VIP/贵宾

-

威望
0
论坛币
183 个
通用积分
59.2896
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
3004 点
帖子
87
精华
0
在线时间
196 小时
注册时间
2011-11-18
最后登录
2024-10-23

楼主
EveIOU 发表于 2020-4-15 17:01:47 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
大家好,遇到for循环问题,求朋友们指点,多谢!目的:查找向量miR.signature中的元素 是否出现在数据集GSE13937、GSE102286的 'X.ID_REF.'列(第1列)

问题:
1.第2段的for循环不知是否得到预期结果、第3段的for循环确定没得到预期结果:GSE102286[, 'X.ID_REF.']里面是有'hsa-mir-605', 'hsa-mir‐629'的(能匹配上),在第4段代码中也能得到证实,为什么用第3段的for循环得不出结果?
2.我的代码里,对两个数据集GSE13937、GSE102286是各自运行一遍代码,能否也写个循环,一步搞定?这样的话,两个数据集GSE13937、GSE102286需要先合并成list吗?
3.结果是否应该保存在list里面,这样能够看到具体哪个元素在哪个数据集的第1列中匹配上了?
4.第1段的for循环,是否也能嵌套在一起?

数据已上传至网盘
链接: https://pan.baidu.com/s/1wZH0c3SIQmoLON_qtHjqvg 提取码: mnjj
再次感谢大家!
for.match.rar (1.47 MB) 本附件包括:
  • for.match.R
  • GSE102286_series_matrix.txt
  • GSE13937_series_matrix.txt


  1. miR.signature <- c('hsa-mir-3607', 'hsa-mir-3677', 'hsa-mir-4661', 'hsa-mir-548v', 'hsa-mir-605', 'hsa-mir‐629')
  2. miR.pattern <- vector("character", length(miR.signature))
  3. for (i in seq_along(miR.signature)) {
  4.   miR.pattern[i] <- paste(miR.signature[i], '.*', sep = "")
  5. }
  6. miR.pattern


  7. GSE13937 <- read.table(file="./GSE13937_series_matrix.txt",
  8.                        header = T, sep = "\t", quote = "", fill = T,
  9.                        comment.char = "!")
  10. for (j in seq_along(miR.pattern)) {print(grep('miR.pattern[j]', GSE13937[, 'X.ID_REF.'], value = T, ignore.case = T))
  11. }



  12. GSE102286 <- read.table(file="./GSE102286_series_matrix.txt",
  13.                         header = T, sep = "\t", quote = "", fill = T,
  14.                         comment.char = "!")
  15. View(GSE102286[, 1])
  16. for (k in seq_along(miR.pattern)) {print(grep('miR.pattern[k]', GSE102286[, 'X.ID_REF.'], value = T, ignore.case = T))      # ignore.case = T表示忽略大小写
  17. }


  18. grep('hsa-mir-605.*', GSE102286[, 'X.ID_REF.'], value = T, ignore.case = T)
  19. print(grep('hsa-mir-605.*', GSE102286[, 'X.ID_REF.'], value = T, ignore.case = T))
  20. print(grep('hsa-mir-629.*', GSE102286[, 'X.ID_REF.'], value = T, ignore.case = T))
复制代码



二维码

扫码加我 拉你入群

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

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


回帖推荐

llb_321 发表于2楼  查看完整内容

第一题,print(grep('miR.pattern[j]', 改成print(grep(miR.pattern[j],试试。miR.pattern[j]的值已经是一个字符串了,就是你要检索的,你再加个引号,那你定位的是引号里的内容,而不是这个东西所代表的值。 第二题,只有两个数据集,何必再费劲多写一个循环呢,又不是写以后经常用到的函数,只要能解决问题就好。 第三题,输出结果,看你自己需要啊。 第四题,你第一个for,只是为了调整向量数据的格式,不需要嵌套。

drunkfish69 发表于15楼  查看完整内容

沙发
llb_321 在职认证  发表于 2020-4-15 18:41:46
第一题,print(grep('miR.pattern[j]', 改成print(grep(miR.pattern[j],试试。miR.pattern[j]的值已经是一个字符串了,就是你要检索的,你再加个引号,那你定位的是引号里的内容,而不是这个东西所代表的值。
第二题,只有两个数据集,何必再费劲多写一个循环呢,又不是写以后经常用到的函数,只要能解决问题就好。
第三题,输出结果,看你自己需要啊。
第四题,你第一个for,只是为了调整向量数据的格式,不需要嵌套。
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

藤椅
EveIOU 发表于 2020-4-15 21:11:30
llb_321 发表于 2020-4-15 18:41
第一题,print(grep('miR.pattern[j]', 改成print(grep(miR.pattern[j],试试。miR.pattern[j]的值已经是一个 ...
多谢朋友指点,前进了一大步,还差一点点。请您再看一下吧,多谢!第二题,目前是只有两个数据集,怕以后数据集比较多,所以还是想写个循环,还望指点,多谢!

第一题,去掉引号之后是这样的结果
2020-04-15_205851.png

感觉理想的结果应该是这样
character(0)
character(0)
character(0)
character(0)
[1] "\"hsa-miR-605\""

[1] "\"hsa-miR-629\""


去掉引号之前是这样的结果
2020-04-15_205635.png




板凳
drunkfish69 发表于 2020-4-15 21:41:36
key <- c('hsa-mir-3607', 'hsa-mir-3677', 'hsa-mir-4661', 'hsa-mir-548v',
         'hsa-mir-605', 'hsa-mir‐629')
miR.signature <- as.data.frame(key)


GSE13937 <- read.table(
  file = "./for.match/GSE13937_series_matrix.txt",
  header = T, sep = "\t", fill = T,
  comment.char = "!"
)
GSE102286 <- read.table(
  file = "./for.match/GSE102286_series_matrix.txt",
  header = T, sep = "\t", fill = T,
  comment.char = "!"
)

GSE13937[, "ID_REF"] <- str_to_lower(GSE13937[, "ID_REF"])
GSE102286[, "ID_REF"] <- str_to_lower(GSE102286[, "ID_REF"])


find.1 <- GSE13937 %>%
  inner_join(miR.signature, by = c("ID_REF"="key"))
find.2 <- GSE102286 %>%
  inner_join(miR.signature, by = c("ID_REF"="key"))

报纸
EveIOU 发表于 2020-4-15 22:46:35
drunkfish69 发表于 2020-4-15 21:41
key
多谢朋友指点,按照您的代码(只是把ID_REF改成了X.ID_REF.,因为数据集列名就是这个)运行了一下,貌似不成功。此外,hsa-mir-3607与hsa-miR-3607,在专业上确实代表两种东西,前者是miRNA前体,后者是miRNA成熟体,两者能匹配上一个或两个都可以。再次感谢!
结果如下:
  1. find.1 <- GSE13937 %>%
  2. +   inner_join(miR.signature, by = c("X.ID_REF."="key"))
  3. Warning message:
  4. Column `X.ID_REF.`/`key` joining character vector and factor, coercing into character vector
  5. > find.1
  6.   [1] X.ID_REF.    X.GSM426055. X.GSM426056. X.GSM426057. X.GSM426058.
  7.   [6] X.GSM426059. X.GSM426060. X.GSM426061. X.GSM426062. X.GSM426063.
  8. [11] X.GSM426064. X.GSM426065. X.GSM426066. X.GSM426067. X.GSM426068.
  9. [16] X.GSM426069. X.GSM426070. X.GSM426071. X.GSM426072. X.GSM426073.
  10. [21] X.GSM426074. X.GSM426075. X.GSM426076. X.GSM426077. X.GSM426078.
  11. [26] X.GSM426079. X.GSM426080. X.GSM426081. X.GSM426082. X.GSM426083.
  12. [31] X.GSM426084. X.GSM426085. X.GSM426086. X.GSM426087. X.GSM426088.
  13. [36] X.GSM426089. X.GSM426090. X.GSM426091. X.GSM426092. X.GSM426093.
  14. [41] X.GSM426094. X.GSM426095. X.GSM426096. X.GSM426097. X.GSM426098.
  15. [46] X.GSM426099. X.GSM426100. X.GSM426101. X.GSM426102. X.GSM426103.
  16. [51] X.GSM426104. X.GSM426105. X.GSM426106. X.GSM426107. X.GSM426108.
  17. [56] X.GSM426109. X.GSM426110. X.GSM426111. X.GSM426112. X.GSM426113.
  18. [61] X.GSM426114. X.GSM426115. X.GSM426116. X.GSM426117. X.GSM426118.
  19. [66] X.GSM426119. X.GSM426120. X.GSM426121. X.GSM426122. X.GSM426123.
  20. [71] X.GSM426124. X.GSM426125. X.GSM426126. X.GSM426127. X.GSM426128.
  21. [76] X.GSM426129. X.GSM426130. X.GSM426131. X.GSM426132. X.GSM426133.
  22. [81] X.GSM426134. X.GSM426135. X.GSM426136. X.GSM426137. X.GSM426138.
  23. [86] X.GSM426139. X.GSM426140. X.GSM426141. X.GSM426142. X.GSM426143.
  24. [91] X.GSM426144. X.GSM426145. X.GSM426146. X.GSM426147. X.GSM426148.
  25. [96] X.GSM426149. X.GSM426150. X.GSM426151. X.GSM426152. X.GSM426153.
  26. [101] X.GSM426154. X.GSM426155. X.GSM426156. X.GSM426157. X.GSM426158.
  27. [106] X.GSM426159. X.GSM426160. X.GSM426161. X.GSM426162. X.GSM426163.
  28. [111] X.GSM426164. X.GSM426165. X.GSM426166. X.GSM426167. X.GSM426168.
  29. [116] X.GSM426169. X.GSM426170. X.GSM426171. X.GSM426172. X.GSM426173.
  30. [121] X.GSM426174. X.GSM426175. X.GSM426176. X.GSM426177. X.GSM426178.
  31. [126] X.GSM426179. X.GSM426180. X.GSM426181. X.GSM426182. X.GSM426183.
  32. [131] X.GSM426184. X.GSM426185. X.GSM426186. X.GSM426187. X.GSM426188.
  33. [136] X.GSM426189. X.GSM426190. X.GSM426191. X.GSM426192. X.GSM426193.
  34. [141] X.GSM426194. X.GSM426195. X.GSM426196. X.GSM426197. X.GSM426198.
  35. [146] X.GSM426199. X.GSM426200. X.GSM426201. X.GSM426202. X.GSM426203.
  36. [151] X.GSM426204. X.GSM426205. X.GSM426206.
  37. <0 行> (或0-长度的row.names)
复制代码

地板
drunkfish69 发表于 2020-4-16 07:06:22
  1. library(tidyverse)

  2. key <- c(
  3.   "hsa-miR-3607", "hsa-miR-3677", "hsa-miR-4661", "hsa-miR-548v",
  4.   "hsa-miR-605", "hsa-miR‐629"
  5. )
  6. miR.signature <- as.data.frame(key)


  7. GSE13937 <- read.table(
  8.   file = "./for.match/GSE13937_series_matrix.txt",
  9.   header = T, sep = "\t", fill = T,
  10.   comment.char = "!"
  11. )
  12. GSE102286 <- read.table(
  13.   file = "./for.match/GSE102286_series_matrix.txt",
  14.   header = T, sep = "\t", fill = T,
  15.   comment.char = "!"
  16. )

  17. find.1 <- GSE13937 %>%
  18.   inner_join(miR.signature, by = c("ID_REF" = "key"))
  19. find.2 <- GSE102286 %>%
  20.   inner_join(miR.signature, by = c("ID_REF" = "key"))
复制代码

  1. > find.2
  2.        ID_REF GSM2732934 GSM2732935 GSM2732936 GSM2732937 GSM2732938 GSM2732939 GSM2732940
  3. 1 hsa-miR-605        0.1        0.1        0.1          0        0.1        0.2          0
  4.   GSM2732941 GSM2732942 GSM2732943 GSM2732944 GSM2732945 GSM2732946 GSM2732947 GSM2732948
  5. 1        0.1        0.1        0.4        0.1        0.1        0.1        0.2        0.1
  6.   GSM2732949 GSM2732950 GSM2732951 GSM2732952 GSM2732953 GSM2732954 GSM2732955 GSM2732956
  7. 1        0.1        0.2        0.1        0.1        0.3        0.1        0.2        0.1
复制代码

我也有点糊涂了,设想find.2可以发现'hsa-miR-605', 'hsa-miR‐629'两条记录,实际只能发现一条。怀疑是不是TXT里的encode的问题?

7
EveIOU 发表于 2020-4-16 12:31:00
drunkfish69 发表于 2020-4-16 07:06
我也有点糊涂了,设想find.2可以发现'hsa-miR-605', 'hsa-miR‐629'两条记录,实际只能发现一条。怀疑 ...
还是感谢您的热心帮助。多谢!

8
drunkfish69 发表于 2020-4-17 05:43:14
  1. > find.2
  2.        ID_REF GSM2732934 GSM2732935 GSM2732936 GSM2732937 GSM2732938 GSM2732939 GSM2732940
  3. 1 hsa-miR-605        0.1        0.1        0.1          0        0.1        0.2          0
  4. 2 hsa-miR-629        0.1       75.6        0.1          0        8.6        0.2          0
  5.   GSM2732941 GSM2732942 GSM2732943 GSM2732944 GSM2732945 GSM2732946 GSM2732947 GSM2732948
  6. 1        0.1        0.1        0.4        0.1        0.1        0.1        0.2        0.1
  7. 2        0.1        0.1        0.4        0.1        7.6       13.2        5.9        0.1
  8.   GSM2732949 GSM2732950 GSM2732951 GSM2732952 GSM2732953 GSM2732954 GSM2732955 GSM2732956
  9. 1        0.1        0.2        0.1        0.1        0.3        0.1        0.2        0.1
  10. 2       11.8        8.7       10.6        0.1        7.5        0.1        0.2        0.1
复制代码

我的怀疑没错,是编码的问题,用view(GSE102286),找到‘hsa-miR-629',把它copy/paste到key里面就出来了。说明值和原来手工输入的不同。

9
EveIOU 发表于 2020-4-17 12:28:35
drunkfish69 发表于 2020-4-17 05:43
我的怀疑没错,是编码的问题,用view(GSE102286),找到‘hsa-miR-629',把它copy/paste到key里面就出来了 ...
多谢朋友。
我本来有个设想:有时候,我想用hsa-miR-629匹配hsa-miR-629-5p, hsa-miR-629-3p(这里只是举例而已,hsa-miR-629后面并没有其他字符了),这种情况下用找交集的思路是不是实现不了啊?我用grep函数,hsa-miR-629后面加上通配符“.* ”(代表0或多个任意字符),是不是更容易实现我的要求呢?您是否还有更好的建议?多谢!

10
drunkfish69 发表于 2020-4-17 13:12:39 来自手机
EveIOU 发表于 2020-4-17 12:28
多谢朋友。
我本来有个设想:有时候,我想用hsa-miR-629匹配hsa-miR-629-5p, hsa-miR-629-3p(这里只是举 ...
我纠结的是你数据源里的编码是什么?为什么同样的字符和R里面手工收入不能匹配?

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-8 03:07