{"id":1829,"date":"2016-01-28T14:57:05","date_gmt":"2016-01-28T19:57:05","guid":{"rendered":"http:\/\/bioinfo.iric.ca\/fr\/?p=1829"},"modified":"2017-04-29T17:07:00","modified_gmt":"2017-04-29T21:07:00","slug":"r-debutant-fonctions-vie-plus-facile","status":"publish","type":"post","link":"https:\/\/bioinfo.iric.ca\/fr\/r-debutant-fonctions-vie-plus-facile\/","title":{"rendered":"R pour les d\u00e9butants: fonctions qui nous rendent plus la vie facile"},"content":{"rendered":"<p>Explorons mon top 10 des fonctions et trucs int\u00e9ressants qui nous facilitent la vie lors de la manipulation de donn\u00e9es dans R.<\/p>\n<h3>S\u00e9quences<\/h3>\n<p>Vous voulez cr\u00e9er de <em>longues s\u00e9quences de nombres ou de lettres<\/em>\u00a0sans les \u00e9crire au long manuellement?<br \/>\nR vous permet de le faire avec l&rsquo;op\u00e9rateur <strong>\u00ab\u00a0:\u00a0\u00bb<\/strong>. \u00a0Vous pouvez aussi utiliser <strong>seq()<\/strong> si vous cherchez \u00e0 cr\u00e9er une s\u00e9quence qui n&rsquo;est pas incr\u00e9ment\u00e9e de 1. Finalement, <strong>letters<div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 hundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-overflow:visible;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-one-full fusion-column-first fusion-column-last fusion-column-no-min-height\" style=\"--awb-bg-size:cover;--awb-margin-bottom:0px;\"><div class=\"fusion-column-wrapper fusion-flex-column-wrapper-legacy\">[]<\/strong> vous permet de cr\u00e9er des s\u00e9quences continues de lettres en ordre alphab\u00e9tique \u00e0 l&rsquo;endroit, \u00e0 l&rsquo;envers ou d\u00e9butant \u00e0 la lettre de votre choix.\u00a0Pour des lettres majuscules, il suffit d&rsquo;utiliser\u00a0LETTERS au lieu de\u00a0letters. \u263a<\/p>\n<pre>\r\n<code class=\"r\">> 1:5\r\n[1] 1 2 3 4 5\r\n\r\n> seq(1, 10, 2)\r\n[1] 1 3 5 7 9\r\n\r\n> letters[1:5]\r\n[1] \"a\" \"b\" \"c\" \"d\" \"e\"\r\n\r\n> LETTERS[1:5]\r\n[1] \"A\" \"B\" \"C\" \"D\" \"E\"\r\n<\/code><\/pre>\n<h3>Paste<\/h3>\n<p>Cette fonction permet de coller ensemble des cha\u00eenes de caract\u00e8res ou de variables.<br \/>\nUn truc int\u00e9ressant de <strong>paste()<\/strong> est qu&rsquo;il est possible de la mettre dans une autre fonction ou dans une boucle.<br \/>\n<em>Par exemple, si vous voulez cr\u00e9er une boucle qui, \u00e0 chaque it\u00e9ration, \u00e9crit un fichier dont le nom est diff\u00e9rent (fichier1, fichier2, fichier3,&#8230;).<\/em><br \/>\nVoici comment proc\u00e9der:<\/p>\n<pre class=\"r\">\r\n<code>>for (i in 1:3) {\r\n   print(paste(\"file\", i, \".txt\", sep=\"\"))\r\n}\r\n[1] \"file1.txt\"\r\n[1] \"file2.txt\"\r\n[1] \"file3.txt\"\r\n<\/code><\/pre>\n<p>Ce qui est important, c&rsquo;est de sp\u00e9cifier le s\u00e9parateur: <\/p>\n<pre class=\"r\">\r\n<code>>for (i in 1:3) {\r\n   print(paste(\"file\", i, \".txt\", sep=\"_\"))\r\n}\r\n[1] \"file_1_.txt\"\r\n[1] \"file_2_.txt\"\r\n[1] \"file_3_.txt\"\r\n<\/code><\/pre>\n<h3>R\u00e9pertoires de travail<\/h3>\n<p>Vous voulez que R place tous les fichiers de sortie dans un r\u00e9pertoire donn\u00e9?<br \/>\nBravo pour la volont\u00e9 de rester organis\u00e9!<br \/>\n<strong>getwd()<\/strong>, pour \u00ab\u00a0get working directory\u00a0\u00bb, est une fonction qui imprime dans la console le r\u00e9pertoire de travail courant.\u00a0 Sa fonction soeur, <strong>setwd()<\/strong>,\u00a0change le r\u00e9pertoire courant pour celui sp\u00e9cifi\u00e9.<\/p>\n<h3>Sous-cha\u00eenes et s\u00e9paration de cha\u00eenes de caract\u00e8res<\/h3>\n<p>Vous \u00eates-vous d\u00e9j\u00e0 retrouv\u00e9 dans la situation o\u00f9 vous ne vouliez garder qu&rsquo;une <em>partie<\/em> d&rsquo;une cha\u00eene de caract\u00e8res? Deux fonctions peuvent vous aider avec cette situation de fa\u00e7on efficace.<br \/>\nLorsque vous connaissez le caract\u00e8re s\u00e9parant les deux parties de la cha\u00eene, utilisez <strong>strsplit()<\/strong>. Lorsque vous voulez une cha\u00eene r\u00e9sultante de longueur sp\u00e9cifique, utilisez\u00a0<strong>substr()<\/strong>.<br \/>\n<em>Par exemple:<\/em><br \/>\n<em>Lorsque des noms de g\u00e8nes ressemblent \u00e0 <\/em>\u00ab\u00a0CPB1_1360\u00a0\u00bb<em>, ils doivent \u00eatre s\u00e9par\u00e9s sur le caract\u00e8re\u00a0<\/strong>\u00ab\u00a0_\u00a0\u00bb<\/strong> pour r\u00e9cup\u00e9rer les symboles.<\/em><\/p>\n<pre class=\"r\"><code>strsplit(\"CPB1_1360\", split=\"_\")<\/code><\/pre>\n<p>La fonction cr\u00e9e une liste dans laquelle on doit s\u00e9lectionner la sous-cha\u00eene d\u00e9sir\u00e9e:<\/p>\n<pre class=\"r\">\r\n<code>>strsplit(\"CPB1_1360\", split=\"_\")[[1]][1]\r\n[1] \"CPB1\"\r\n\r\n>strsplit(\"CPB1_1360\", split=\"_\")[[1]][2]\r\n[1] \"1360\"\r\n<\/code><\/pre>\n<p>Si votre s\u00e9parateur est un caract\u00e8re sp\u00e9cial, c&rsquo;est-\u00e0-dire un caract\u00e8re qui a une signification particuli\u00e8re dans une expression r\u00e9guli\u00e8re (comme \u00ab\u00a0.\u00a0\u00bb qui veut dire \u00ab\u00a0n&rsquo;importe quel caract\u00e8re\u00a0\u00bb ou \u00ab\u00a0|\u00a0\u00bb qui veut dire \u00ab\u00a0ou\u00a0\u00bb), il fait recourir au \u00ab\u00a0\\\\\u00a0\u00bb ou utiliser l&rsquo;option <strong>fixed=TRUE<\/strong>.<\/p>\n<pre class=\"r\">\r\n<code>>strsplit(\"CPB1|1360\", split=\"\\\\|\")\r\n>strsplit(\"CPB1|1360\", split=\"|\", fixed=TRUE)\r\n<\/code><\/pre>\n<p><em>Un autre exemple:<\/em><br \/>\n<em>Pour raccourcir les identifieurs de patients de type \u00ab\u00a0<\/em>TCGA.E2.A154.01A.11R.A115.07<em>\u00a0\u00bb \u00e0 <\/em>TCGA-XX-XXXX, <em>vous utilisez\u00a0<\/em><strong>substr()<\/strong>\u00a0<em>en sp\u00e9cifiant le d\u00e9but et la fin:<\/em><\/p>\n<pre class=\"r\"><code>> substr(\"TCGA.E2.A154.01A.11R.A115.07\", start=0, stop=12)\r\n[1] \"TCGA.E2.A154\"\r\n<\/code><\/pre>\n<h3>Appartenance \u00e0 une liste<\/h3>\n<p>L&rsquo;appartenance \u00e0 une liste peut \u00eatre test\u00e9e rapidement avec R. Lorsque vous avez 2 listes, <strong>a<\/strong> et <strong>b<\/strong> et que vous voulez savoir combien d&rsquo;\u00e9l\u00e9ments de <strong>a<\/strong> se trouvent dans <strong>b<\/strong> la syntaxe est <code class=\"r\">a%in%b<\/code><br \/>\nCeci retourne un vecteur de la m\u00eame longueur que <strong>a<\/strong> qui contient des valeurs bool\u00e9ennes (vrai\/faux), caract\u00e9risant l&rsquo;appartenance ou non \u00e0 la liste <strong>b<\/strong> de chaque \u00e9l\u00e9ment de <strong>a<\/strong>. Attention, pour obtenir le r\u00e9sultat contraire, la syntaxe est invers\u00e9e !\u00a0<code>b%in%a<\/code>\u00a0<br \/>\nVoici un exemple:<\/p>\n<pre class=\"r\"><code>> a = c(\"A\",\"B\",\"C\")\r\n> b = c(\"C\",\"D\",\"R\")\r\n> a%in%b\r\n[1] FALSE FALSE TRUE\r\n\r\n> b%in%a\r\n[1] TRUE FALSE FALSE\r\n<\/code><\/pre>\n<h3>S\u00e9lection<\/h3>\n<p>Pour s\u00e9lectionner une colonne sp\u00e9cifique dans un tableau sans devoir compter les colonnes pour conna\u00eetre l&rsquo;indice, on peut utiliser le nom de la colonne et \u00ab\u00a0$\u00a0\u00bb :<\/p>\n<pre class=\"r\"><code>> a\r\nbcr_patient_barcode er_status_by_ihc pr_status_by_ihc her2_status_by_ihc\r\n1 TCGA-AR-A1AR Negative Negative Negative\r\n2 TCGA-BH-A1EO Positive Positive Negative\r\n3 TCGA-BH-A1ES Positive Positive Negative\r\n4 TCGA-BH-A1ET Positive Positive Negative\r\n\r\n> a$er_status_by_ihc\r\n[1] \"Negative\" \"Positive\" \"Positive\" \"Positive\"<\/code><\/pre>\n<p>On peut aussi vouloir s\u00e9lectionner les\u00a0<em>caract\u00e9ristiques<\/em>\u00a0d&rsquo;un objet. Par exemple, r\u00e9cup\u00e9rer la <em>p-value<\/em> d&rsquo;un test t de Student:\u00a0<code>t.test$p.value<\/code><\/p>\n<pre class=\"r\"><code>> t.test(e1[,1],e2[,2])\r\nWelch Two Sample t-test\r\ndata: e1[, 1] and e2[, 2]\r\nt = 0.0581, df = 1645.314, p-value = 0.9537\r\nalternative hypothesis: true difference in means is not equal to 0\r\n95 percent confidence interval:\r\n-0.02670277 0.02833160\r\nsample estimates:\r\nmean of x mean of y\r\n0.5019641 0.5011497\r\n\r\n> t.test(e1[,1],e2[,2])$p.value\r\n[1] 0.9537151\r\n<\/code><\/pre>\n<p>Pour afficher les caract\u00e9ristiques d&rsquo;un objet et leur nom, il faut utiliser <strong>names(object)<\/strong>.<\/p>\n<pre class=\"r\"><code>> names(t.test(e1[,1],e2[,2]))\r\n[1] \"statistic\" \"parameter\" \"p.value\" \"conf.int\" \"estimate\" \"null.value\" \"alternative\"\r\n[8] \"method\" \"data.name\" \r\n<\/code><\/pre>\n<h3>Distributions et \u00e9chantillonnage al\u00e9atoire.<\/h3>\n<p>Pour obtenir une s\u00e9rie de nombres al\u00e9atoires tir\u00e9s d&rsquo;une distribution normale, appelez\u00a0<strong>rnorm()<\/strong>, tout en sp\u00e9cifiant le nombre de tirages, la moyenne et l&rsquo;\u00e9cart-type de la distribution d\u00e9sir\u00e9e.<\/p>\n<h3>Aide<\/h3>\n<p>Si vous \u00eates perdu et que vous voulez en apprendre plus sur une fonction, tapez <strong>?<\/strong>\u00a0devant le nom de la fonction. Ceci ouvrira le manuel d&rsquo;utilisation o\u00f9 vous pourrez trouver les d\u00e9tails importants.<\/p>\n<h3>Majuscules, minuscules<\/h3>\n<p>Pour mettre des caract\u00e8res en majuscules ou en minuscules les fonctions\u00a0<strong>toupper()<\/strong> et <strong>tolower()<\/strong>\u00a0sont utiles.<\/p>\n<pre class=\"r\"><code>> toupper(\"FoRMat TrES LaiD\")\r\n[1] \"FORMAT TRES LAID\"\r\n\r\n> tolower(\"RENdS-MoI PLUs PeTIt\")\r\n[1] \"rends-moi plus petit\"\r\n<\/span><\/code><\/pre>\n<h3>R\u00e9p\u00e9titions et motifs<\/h3>\n<p><strong>rep()<\/strong>\u00a0vous permet de faire des r\u00e9p\u00e9titions\u00a0<em>sur mesure<\/em>. Vous pouvez sp\u00e9cifier le motif vous-m\u00eame, avec le nombre de r\u00e9p\u00e9titions ou encore la longueur totale d\u00e9sir\u00e9e avec\u00a0<strong>length.out<\/strong>.<br \/>\n<em>Voici une chanson pop tr\u00e8s r\u00e9p\u00e9titive (r\u00e9p\u00e9ter 4 fois d&rsquo;une voix nasillarde)<\/em> :<\/p>\n<pre class=\"r\"><code>> rep(c(\"I'm like a bird, I'll only fly away\", \"I don't know where my soul is, I don't know where my home is\"),time=4)\r\n[1] \"I'm like a bird, I'll only fly away\"\r\n[2] \"I don't know where my soul is, I don't know where my home is\"\r\n[3] \"I'm like a bird, I'll only fly away\"\r\n[4] \"I don't know where my soul is, I don't know where my home is\"\r\n[5] \"I'm like a bird, I'll only fly away\"\r\n[6] \"I don't know where my soul is, I don't know where my home is\"\r\n[7] \"I'm like a bird, I'll only fly away\"\r\n[8] \"I don't know where my soul is, I don't know where my home is\"<\/code><\/pre>\n<div class=\"fusion-clearfix\"><\/div><\/div><\/div><\/div><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Explorons mon top 10 des fonctions et trucs int\u00e9ressants qui nous facilitent la vie lors de la manipulation de donn\u00e9es dans R. S\u00e9quences Vous voulez cr\u00e9er de longues s\u00e9quences de nombres ou de lettres\u00a0sans les \u00e9crire au long manuellement? R vous permet de le faire avec l&rsquo;op\u00e9rateur \u00ab\u00a0:\u00a0\u00bb. \u00a0Vous pouvez aussi utiliser seq() si vous cherchez \u00e0 cr\u00e9er une s\u00e9quence qui n&rsquo;est pas incr\u00e9ment\u00e9e de 1. Finalement, letters<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[41,24],"tags":[144],"class_list":["post-1829","post","type-post","status-publish","format-standard","hentry","category-bioinformatique","category-langage-r","tag-debutant"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/posts\/1829","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/comments?post=1829"}],"version-history":[{"count":26,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/posts\/1829\/revisions"}],"predecessor-version":[{"id":2716,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/posts\/1829\/revisions\/2716"}],"wp:attachment":[{"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/media?parent=1829"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/categories?post=1829"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/tags?post=1829"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}