比较两个列表[R]

时间:2014-04-28 23:43:14

标签: r match

我有两个相当长的列表(都是232000行)。当尝试使用两者运行分析时,R给出了一个错误,即一个列表中的某些元素不在另一个列表中(对于要运行的特定代码,两个列表都需要完全相同)。我已经做了以下尝试和解读这个:

#In Both
both <- varss %in% varsg
length(both)

#What is in Both
int <- intersect(varss,varsg)
length(int)

#What is different in varss
difs <- setdiff(varss,varsg)
length(difs)

#What is different in varsg
difg <- setdiff(varsg,varss)
length(difg)

我认为我的代码是正确的,但我的问题是上面代码的结果并没有产生我需要的东西。例如,对于both <- varss %in% varsg,我只获得一个FALSE。我的列表是否需要在特定的类中才能使其正常工作?我试过了data.framelistcharacter。不确定是否需要应用function这样的主要内容。

只是提供一些关于我的清单的信息,两者都是一份SNP名称(遗传数据)

编辑:

我已将这两个文件加载为readRDS(),并且不确定这是否会导致某些问题。尝试使用varss[1:10,]时,我会收到以下信息:

 [1] rs41531144 rs41323649 exm2263307 rs41528348 exm2216184 rs3901846 
 [7] exm2216185 exm2216186 exm2216191 exm2216198
232334 Levels: exm1000006 exm1000025 exm1000032 exm1000038 ... rs9990343

我对RData文件没什么经验,所以不确定这是不是问题......

使用varsg[1:10,]

也是如此
 [1] exm2268640 exm41      exm1916089 exm44      exm46      exm47     
 [7] exm51      exm53      exm55      exm56     
232334 Levels: exm1000006 exm1000025 exm1000032 exm1000038 ... rs999943 

1 个答案:

答案 0 :(得分:6)

您显示的所有功能都不能很好地与列表或data.frames一起使用,例如:

varss <- list(a = 1:8)
varsg <- list(a = 2:9)

both <- varss %in% varsg
both
# [1] FALSE

#What is in Both
int <- intersect(varss,varsg)
int
# list()

#What is different in varss
difs <- setdiff(varss,varsg)
difs
# [[1]]
# [1] 1 2 3 4 5 6 7 8

#What is different in varsg
difg <- setdiff(varsg,varss)
difg
# [[1]]
# [1] 2 3 4 5 6 7 8 9

我建议您通过执行以下操作切换到矢量:

varss <- unlist(varss)
varsg <- unlist(varsg)