цикл по символам и числам для создания переменных - PullRequest
0 голосов
/ 15 декабря 2018

Рассмотрим следующее data.frame:

structure(list(chr = c("1A", "1B", "1D", "2A", "2B", "2D"), initial = 
c(210200000L,237700000L, 166200000L, 326300000L, 344400000L, 264400000L), 
end = c(215800000L, 243500000L, 173800000L, 327000000L, 351300000L, 
272500000L)), row.names = c(NA, 6L), class = "data.frame")

Это выглядит следующим образом:

chr   initial       end
1A 210200000 215800000
1B 237700000 243500000
1D 166200000 173800000
2A 326300000 327000000
2B 344400000 351300000
2D 264400000 272500000

Я хотел бы перебрать переменные этого набора данных, чтобы получить числовой диапазонпеременные, подобные этому:

A1 <- 210200000:215800000
B1 <- 237700000:243500000
D1 <- 166200000:173800000

То есть A1, B1, D1 ... и так далее до A7, B7, D7.

Я знаю, что мог бы создать цикл for, подобный этому for (i in 1:7) {...}, но я не знаю, как я мог бы также перебирать символы ABD

1 Ответ

0 голосов
/ 15 декабря 2018

Непонятно на 100%, где вы выполняете итерации по A, B, D и 1: 7 - ваши примерные данные повторяются только до 2, но, возможно, это всего лишь фрагмент ваших общих данных?

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

dat <- structure(list(chr = c("1A", "1B", "1D", "2A", "2B", "2D"), initial = 
                 c(210200000L,237700000L, 166200000L, 326300000L, 344400000L, 264400000L), 
               end = c(215800000L, 243500000L, 173800000L, 327000000L, 351300000L, 
                       272500000L)), row.names = c(NA, 6L), class = "data.frame")

sequences <- lapply(1:nrow(dat), function(x) dat[x,2]:dat[x,3])

#helper function from ?strsplit
strReverse <- function(x) sapply(lapply(strsplit(x, NULL), rev), paste, 
                                 collapse="") 
#you could also use make.names() instead.
names(sequences) <- strReverse(dat$chr)
#specify the global environment - creates an object from each item in the list
list2env(sequences, envir = .GlobalEnv)

Запуск ls() после этого даст:

> ls()
[1] "A1"         "A2"         "B1"         "B2"         "D1"         "D2"         "dat"        "sequences"  "strReverse"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...