Как я могу вернуть NULL, если в элементе вектора символов не найдено совпадение с регулярным выражением? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть символьный вектор, который выглядит как (dput output):

c("           genotype[0]= rv props(rr,rv,vv)=  0.000  0.944  0.056    reads=     10 , variants=      7", 
"           genotype[1]= na ", "           genotype[2]= rv props(rr,rv,vv)=  0.000  1.000  0.000    reads=     16 , variants=      8", 
"           genotype[3]= rv props(rr,rv,vv)=  0.001  0.999  0.000    reads=     13 , variants=      5", 
"           genotype[4]= vv props(rr,rv,vv)=  0.000  0.489  0.511    reads=     10 , variants=      8", 
"           genotype[5]= vv props(rr,rv,vv)=  0.000  0.051  0.949    reads=     10 , variants=      9", 
"           genotype[6]= rr props(rr,rv,vv)=  1.000  0.000  0.000    reads=     20 , variants=      0", 
"           genotype[7]= rv props(rr,rv,vv)=  0.000  1.000  0.000    reads=     15 , variants=      7", 
"           genotype[8]= rr props(rr,rv,vv)=  0.975  0.025  0.000    reads=      7 , variants=      0", 
"           genotype[9]= vv props(rr,rv,vv)=  0.000  0.001  0.999    reads=     17 , variants=     16"
)

Я хотел бы вернуть второе значение в триплете вероятностей для каждого символьного вектора, то есть 0,944, 0,999 и др c. Однако я также хочу, чтобы NULL или что-то еще в результате указывало, что строка, начинающаяся с genotype[1], не соответствует.

Мой код выглядит так:

regmatches(genotype_strings, regexpr("[[:digit:]].[[:digit:]]+  [[:digit:]].[[:digit:]]+  [[:digit:]].[[:digit:]]+", genotype_strings))

Хотя В результате всего 9 элементов, а хотелось бы 10.

Заранее спасибо!

1 Ответ

2 голосов
/ 20 апреля 2020

Удалить все символы, кроме цифр, точек и пробелов. Тогда мы можем прочитать это, используя read.table. Извлеките третье поле.

read.table(text = gsub("[^0-9. ]", "", v), fill = TRUE)[, 3]
##  [1] 0.944    NA 1.000 0.999 0.489 0.051 0.000 1.000 0.025 0.001
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...