Как избавиться от "" имени объекта и работать в цикле? - PullRequest
1 голос
/ 22 сентября 2011

Я не знаю, как точно определить эту проблему;но я не мог понять это

    genx <- list(scaffold_1 = c("AAATTTTTATAT"),scaffold_2 = c("AAATTTTTATAT"),
    scaffold_3 = c("AAATTTTTATAT"),scaffold_4 = c("AAATTTTTATAT"),
    scaffold_5 = c("AAATTTTTATATA"),scaffold_6 = c("AAATTTTTATAT"),
scaffold_7 = c("AAATTTTTATAT"),scaffold_8 = c("AAATTTTTATATA"))


TATA = "TATA"   
      myobs <- paste("genx$scaffold_", 1:8, sep = "")

Я хочу применить следующую функцию к каждому элементу элементов myobs (являются объектами):

source("http://www.bioconductor.org/biocLite.R")

biocLite("Biostrings")
require((Biostrings)

countPattern (TATA, genx$scaffold_1, max.mismatch = 1)
[1] 3  

Когда я использую следующее:

countPattern (TATA, myobs[1], max.mismatch = 1)

Не работает так, как я думаю, интерпретируется как:

countPattern (TATA, "genx$scaffold_1", max.mismatch = 1)
 [1] 0 

Что не совпадает с приведенным выше.Как можно избавиться от "" и создать цикл для выполнения этой работы, ваши предложения приветствуются:

Ответы [ 5 ]

2 голосов
/ 22 сентября 2011

Вы можете напрямую использовать список и сделать sapply, который действует на каждый элемент списка.Вот пример кода

sapply(genx, countPattern, pattern = TATA, max.mismatch = 1)
1 голос
/ 23 сентября 2011

Есть проблема с:

get("genx$scaffold_1")

, потому что R думает, что вы ищете объект с таким полным именем, а не компонент 'scaffold_1' из 'genx'.

Чтодолжно работать:

eval(parse(text="genx$scaffold_1"))

Но см .:

fortune(106)

Больше проблемных точек по этим линиям можно найти в 'The R Inferno': http://www.burns -stat.ком / страницы / Репетитор / R_inferno.pdf

1 голос
/ 23 сентября 2011

Что по этому поводу:

sapply(genx, function (x) { countPattern(TATA, x, max.mismatch = 1) })
1 голос
/ 22 сентября 2011

Вы можете использовать функцию get

a  <- 12
get("a") # returns 12
0 голосов
/ 22 сентября 2011

Я бы порекомендовал вам определить genx$scaffold как вектор, и тогда вы можете легко использовать функцию apply:

genx = data.frame(scaffold = c(1, 2, 3, 4)) # genx$scaffold is a vector

Теперь вы можете легко запускать функцию countPattern() для каждого элемента genx $ scaffold

apply(as.matrix(genx$scaffold), 1, 
    function (x) { countPattern(TATA, x, max.mismatch = 1) })

Вы можете легко расширить решение, чтобы genx $ scaffold также могло быть матричным и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...