【问题标题】:Comparing two lists [R]比较两个列表 [R]
【发布时间】:2014-04-29 08:30:56
【问题描述】:

我有两个相当长的列表(都是 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 &lt;- 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

我对@9​​87654331@ 文件没有什么经验,所以不确定这是否是个问题...

使用varsg[1:10,] 也会发生同样的情况:

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

【问题讨论】:

  • 我知道您的数据量很大,但您能否提供一个简化示例说明 varssvarsg 是什么?最好使用?dput之类的工具
  • 这很难弄清楚。但让我在正文中提供更多信息......
  • 您能否提供所有这些的输出值:class(varss)class(varsg)length(varss)length(varsg)sum(both)length(int)length(difs)、@987654344 @
  • class(varss) = "data.frame";class(varsg) = "data.frame"; length(varss) = 1;length(varsg)=1;sum(both)= 0; length(int)=0;length(difs)=1;length(diff)=1

标签: r match


【解决方案1】:

您展示的所有功能都不能很好地与列表或 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)

【讨论】:

  • 这就是我已经尝试过的。除非这些实际列表没有差异,否则我在使用length 时只会得到1。仅使用intersect(varss,varsg) 会生成一个长列表...几乎不等于1...所以很好奇这里是否存在根本性错误。
  • 谢谢! “取消列出”它起作用了。我现在可以识别不相等的 SNP。我的分析告诉我有 13 个不匹配,现在上面的操作已经确定了这 13 个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 2011-02-15
  • 2021-04-15
相关资源
最近更新 更多