Назначьте имена строк и сохраните несколько текстовых файлов в одном go с помощью R - PullRequest
0 голосов
/ 12 марта 2020

Я хотел сделать 6 случайных наборов данных для практики и использовал этот код:

mypath <- "C:/Users/***"  
A <- function(x)(matrix(round(runif(100, 0, 10^5)), nrow = 100))
rownames(x) <- paste0("Gene", 1:100)

Я хотел сохранить 6 файлов с именем sample1-6.txt, содержащих различные случайные числа в одном go, поэтому я попытался написать для l oop:

for (i in 1:6) {write.table(A(x), file = paste0(mypath, paste("Sample", i, "txt", sep = ".")), quote = F, sep ="\t")
}

проблема заключается в том, что он делает такую ​​матрицу в текстовом файле:

 [,1]
  [1,] 87207
  [2,] 39773
  [3,] 66859
  [4,] 43813

, но я хотел, чтобы файлы быть таким, не запуская каждый раз коды вручную:

Gene1   87207
Gene2   39773
Gene3   66859
Gene4   43813

Есть ли способ поместить rownames(x) в l oop или в функцию?

Ответы [ 2 ]

2 голосов
/ 12 марта 2020

@ R. Скифини опередил меня до ответа, поэтому я сделаю несколько стилевых комментариев:

  • "*" имеет специфическое c регулярное выражение в некоторых строках; попытайтесь избежать этого в игрушечных примерах.
  • Если вы хотите, чтобы ваш код был более переносимым, не начинайте / заканчивайте строки, которые представляют пути к файлам / каталогам с / или \; эти разделители имеют спецификацию ОС c.
  • В том же духе, использование paste() для построения путей менее переносимо, чем использование file.path(), что автоматически вставит спецификатор ОС c пути-разделителя.
  • Функции, которые не нуждаются в аргументах, могут быть написаны без аргументов. Например, это работает так же хорошо:
A <- function() {    ## notice, no "x"
  z = matrix(round(runif(4, 0, 10^5)), nrow = 4)
  rownames(z) <- paste0("Gene", 1:4)
  z
}
  • Определения функций должны быть заключены в фигурные скобки {}, а не в скобки.
  • Ваш for l oop немного трудно читать в Интернете, особенно на мобильных устройствах. Попробуйте разбить длинные строки. Сравните это:
   for (i in 1:6) {write.table(A(x), file = paste0(mypath, paste("Sample", i, "txt", sep = ".")), quote = F, sep ="\t")
}

с этим:

for (i in 1:6) {
    write.table(
        A(x), 
        file = paste0(mypath, paste("Sample", i, "txt", sep = ".")), 
        quote = F, 
        sep ="\t"
    )
}

Ничто из того, что я сказал, не высечено на камне. Ознакомьтесь со следующими руководствами по стилю: http://adv-r.had.co.nz/Style.html https://google.github.io/styleguide/Rguide.html

И поздравляю с хорошо написанным первым вопросом. Добро пожаловать на SO!

1 голос
/ 12 марта 2020

Как это?

A <- function(x){
  z = matrix(round(runif(4, 0, 10^5)), nrow = 4)
  rownames(z) <- paste0("Gene", 1:4)
  z
}

for (i in 1:3) {
  print(A())
}

       [,1]
Gene1 95184
Gene2 45595
Gene3 28377
Gene4 34266
       [,1]
Gene1 48586
Gene2 68974
Gene3 34566
Gene4 33815
       [,1]
Gene1 76261
Gene2   678
Gene3 89750
Gene4 79978
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...