Chciałem wykonać 6 losowych zestawów danych do praktyki i użył tego kodu:

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

Chciałem zaoszczędzić 6 plików o nazwie próbki1-6.txt zawierający każdą inną liczbę losową w jednym Idź, więc próbowałem napisać do pętli:

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

Problem polega na tym, że ma matrycę w ten sposób w pliku tekstowym:

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

Ale chciałem, aby pliki były takie, bez ręcznego prowadzenia kodów za każdym razem:

Gene1   87207
Gene2   39773
Gene3   66859
Gene4   43813

Czy istnieje sposób na umieszczenie rownames(x) w pętli lub w funkcji?

r
0
Reza Khayami 12 marzec 2020, 02:35

2 odpowiedzi

Najlepsza odpowiedź

Lubię to?

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
1
R. Schifini 11 marzec 2020, 23:48

@R. Schifini pokonał mnie do odpowiedzi, więc zrobię kilka komentarzy:

  • "*" ma określone znaczenie regex w niektórych strunach; Spróbuj uniknąć go w przykładach zabawek.
  • Jeśli chcesz, aby Twój kod był bardziej przenośny, nie uruchamiaj / końcowych ciągów, które reprezentują ścieżki do plików / katalogów za pomocą / lub \; Te ograniczniki są specyficzne.
  • W tej samej żyle, przy użyciu ścieżek {{x0}
  • Funkcje, które nie wymagają argumentów, mogą być napisane bez argumentów. Na przykład to działa równie dobrze:
A <- function() {    ## notice, no "x"
  z = matrix(round(runif(4, 0, 10^5)), nrow = 4)
  rownames(z) <- paste0("Gene", 1:4)
  z
}
  • Definicje funkcji powinny być zamknięte w kręconych klamrach {}, a nie nawiasy.
  • Pętla {X0}} jest nieco trudna do odczytania w sieci, zwłaszcza na urządzeniach mobilnych. Spróbuj zerwać długie linie. Porównaj to:
   for (i in 1:6) {write.table(A(x), file = paste0(mypath, paste("Sample", i, "txt", sep = ".")), quote = F, sep ="\t")
}

Do tego:

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

Żaden z tego, co powiedziałem, jest ustawiony w kamieniu. Sprawdź te prowadnice stylu: http://adv-r.had.co.nz/style.htmll. https://google.github.io/Styleguide/rguide.html

I gratuluję dobrej pisać pierwsze pytanie. Witamy w tak!

2
Josh 16 marzec 2020, 22:03