2015-02-28 2 views
2

Есть ли оператор «цитата» в R, аналогичный qw в Perl? qw - оператор цитирования, который позволяет вам создавать список цитируемых элементов без необходимости указывать их отдельно.Есть ли оператор «цитаты» в R?

Вот как вы могли бы сделать это без qw (т.е. используя десятки кавычки и запятые):

#!/bin/env perl 
use strict; 
use warnings; 

my @NAM_founders = ("B97", "CML52", "CML69", "CML103", "CML228", "CML247", 
        "CML322", "CML333", "Hp301", "Il14H", "Ki3", "Ki11", 
        "M37W", "M162W", "Mo18W", "MS71", "NC350", "NC358" 
        "Oh7B", "P39", "Tx303", "Tzi8", 
        ); 

print(join(" ", @NAM_founders)); # Prints array, with elements separated by spaces 

Вот делают то же самое, но с qw гораздо чище:

#!/bin/env perl 
use strict; 
use warnings; 

my @NAM_founders = qw(B97 CML52 CML69 CML103 CML228 CML247 CML277 
         CML322 CML333 Hp301 Il14H Ki3 Ki11 Ky21 
         M37W M162W Mo18W MS71 NC350 NC358 Oh43 
         Oh7B P39 Tx303 Tzi8 
        ); 

print(join(" ", @NAM_founders)); # Prints array, with elements separated by spaces 

Я искал, но ничего не нашел.

+0

Возможно, что-то вроде 'stringi :: stri_split_boundaries' или' stri_extract _ * _ words'. Но было бы хорошо знать, что именно делает 'qw()' для тех, кто никогда не использовал Perl –

+0

Спасибо за предложение объяснить 'qw' лучше! Отредактировано только сейчас. –

ответ

3

Попробуйте использовать scan и текстовое соединение:

qw=function(s){scan(textConnection(s),what="")} 
NAM=qw("B97  CML52 CML69 CML103 CML228 CML247 CML277 
        CML322 CML333 Hp301 Il14H  Ki3  Ki11 Ky21 
        M37W  M162W Mo18W MS71  NC350 NC358 Oh43 
        Oh7B  P39  Tx303 Tzi8") 

Это всегда возвращает вектор строк, даже если данные в кавычках числовые:

> qw("1 2 3 4") 
Read 4 items 
[1] "1" "2" "3" "4" 

Я не думаю, что вы получите намного проще, так как пробел голых слова не действителен синтаксис в R , даже завернутые в фигурные скобки или parens. Вы должны процитировать их.

+1

Один набор котировок лучше, чем десятки! –

1

Для R, ближе всего, что я могу думать, или что я нашел до сих пор, чтобы создать единый блок текста, а затем разбить его с помощью strsplit, таким образом:

#!/bin/env Rscript 
NAM_founders <- "B97  CML52 CML69 CML103 CML228 CML247 CML277 
       CML322 CML333 Hp301 Il14H  Ki3  Ki11 Ky21 
       M37W  M162W Mo18W MS71  NC350 NC358 Oh43 
       Oh7B  P39  Tx303 Tzi8" 

NAM_founders <- unlist(strsplit(NAM_founders,"[ \n]+")) 

print(NAM_founders) 

Что печатает

[1] "B97" "CML52" "CML69" "CML103" "CML228" "CML247" "CML277" "CML322" 
[9] "CML333" "Hp301" "Il14H" "Ki3" "Ki11" "Ky21" "M37W" "M162W" 
[17] "Mo18W" "MS71" "NC350" "NC358" "Oh43" "Oh7B" "P39" "Tx303" 
[25] "Tzi8"