2014-10-08 7 views
1

У меня есть два TXT-файла. Оба файла представляют собой списки строк с одной строкой на строку, например.Повторная выборка между двумя списками

GRIM1 
PHOXA2 
SLITRK4 

Оба текстовых файла длиной ~ 20 000 строк. Я хочу случайным образом отбирать 500 строк из файлов 1 и 700 строк из файла 2. Затем я хочу подсчитать количество строк, которые перекрывают оба этих подмножества.
Затем я хочу повторить этот процесс 100 раз и вычислить min, max и среднее количество строк, которые перекрывают эти подмножества из 100 повторных попыток.

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

Error in sample.int(length(x), size, replace, prob) : 
    cannot take a sample larger than the population when 'replace = FALSE' 

Этот код был:

listA <- read.csv(file="file1.txt", header=F) 
listB <- read.csv(file="file2.txt", header=F) 

listA <- as.character(listA) # to check that you really have a vector of gene names #maybe you have to do: listA <- as.character(listA) 
listB <- as.character(listB) 

res <- rep(NA, 100) 
genesToDraw <- 500 # how many to select 
genesToDraw2 <- 700 # if you want to take different number from second list 

for(i in 1:length(res)){ 

drawA <- sample(x=listA, size=genesToDraw, replace=FALSE) 
drawB <- sample(x=listB, size=genesToDraw2, replace=FALSE) # or size=genesToDraw2 

res[i] <- length(intersect(drawA, drawB)) 
} 

hist(res, breaks=20) 
table(res) 
max(res) 
sum(res > 5) # how often i 

Спасибо заранее за вашу помощь и пожалуйста дайте мне знать, если я уточню.

В ответ на комментарии, когда я запускаю dput (listA) и dput (listB) после части as.character кода, я получаю кучу разделенных запятыми чисел в качестве вывода. Вот подмножество:

1100, 4576, 7394, 1343, 4997, 13807, 1233, 9580, 15254, 10466, 3333, 622, 11177, 4067, 4800, 7592, 5363, 9646, 11213, 14314, 2475, 8389, \n12559, 12808, 5248, 10423, 7856, 12976, 9695, 1674, 2090, 9369, 12089, 13952, 1218, 7966, 6949, 4088, 623, 4768, 2002, 11776, 14710, 5502, 6212, 7300, 2123, 7194, 2128, 1683, 14987, 4491, 2672, 10275, 9424, 997, 15506, 14307, 2644, 11508, 9272, 5107, 10146, 11693, 1802, 652, 13073, 4268, 5435, 718, 4845 

С наилучшими пожеланиями,

Rubal

+0

Что такое вывод 'length (listA)' и 'length (listB)'? – Ujjwal

+0

проверить класс listA и listB. первый аргумент для образца должен быть вектором или целым числом, и, скорее всего, это кадр данных. Ошибка говорит, что количество элементов в x меньше количества образцов, которые вы хотите принять, что не допускается, если replace = FALSE – DMT

+0

класс является символом. – user964689

ответ

1

Как мы уже говорили, первым, так как вы ожидаете строки, установите флаг stringsAsFactors ложь в read.csv звонков, так что вы дон 't беспорядок с факторами

listA <- read.csv(file="file1.txt", header=FALSE, stringsAsFactors=FALSE) 
listB <- read.csv(file="file2.txt", header=FALSE, stringsAsFactors=FALSE) 

Теперь у вас будет два кадра данных, каждый с одним столбцом, объектов символов. функция выборки требует векторов, так что мы можем преобразовать наш dataframes один столбца векторы через

listA<-listA[,1] 
listB<-listB[,1] 

и что должно получить код для запуска!

+0

Отличное спасибо! – user964689

Смежные вопросы