Я пытаюсь сравнить несколько векторов Entrez ID (целочисленных векторов), используя Reduce (intersect, ...).Векторы выбираются из базы данных с использованием «DISTINCT», поэтому один вектор не содержит дубликатов.
length(factor(c(l1$entrez)))
дает ту же длину (и те же идентификаторы без функции длины), что и
length(c(l1$entrez))
Когда я сравниваю несколько векторов с
length(Reduce(intersect,list(c(l1$entrez),c(l2$entrez),c(l3$entrez),c(l4$entrez))))
или
length(Reduce(intersect,list(c(factor(l1$entrez)),c(factor(l2$entrez)),c(factor(l3$entrez)),c(factor(l4$entrez)))))
результат не тот же.Я знаю этот фактор! = OriginalVector, но я не могу понять, почему результат отличается, хотя длина и уровни исходных факторов / векторов одинаковы.
Может кто-нибудь объяснить, почему функция векторов пересечения работает с векторами?а факторы?Неужели пересечение двух списков факторов снова является списками факторов, а затем дубликаты рассматриваются по-разному?
Редактировать - Пример:
> head(l1)
entrez
1 1
2 503538
3 29974
4 87769
5 2
6 144568
> head(l2)
entrez
1 1743
2 1188
3 8915
4 7412
5 51082
6 5538
Списки содержат от 500 до 20K идентификаторов Entrez.Таким образом, векторы содержат чистое целое число и должны давать пересечение среди всех проверенных векторов.
> length(Reduce(intersect,list(c(factor(l1$entrez)),c(factor(l2$entrez)),c(factor(l3$entrez)),c(factor(l4$entrez)))))
[1] 514
> length(Reduce(intersect,list(c(l1$entrez),c(l2$entrez),c(l3$entrez),c(l4$entrez))))
[1] 338
> length(Reduce(intersect,list(l1$entrez,l2$entrez,l3$entrez,l4$entrez)))
[1] 494
Я должен извиниться.Различное поведение функции пересечения может быть вызвано проблемой с данными.Я нашел поля в наборе данных, содержащих разделенные запятыми идентификаторы Entrez (22038, 23207, ...).Я должен был более детально взглянуть на данные в первую очередь.Спасибо за ответы и ваше время.Хотя я пока не понимаю разные результаты, я уверен, что это является причиной различного поведения.Кто-нибудь может это подтвердить?