For循环以查找两个列表之间的匹配项(R)

时间:2019-11-18 23:12:33

标签: r

这是一个非常琐碎的问题,我多次检查了括号,但没有发现任何错误。 我有两个列表,每个列表都有一个.txt文件的路径作为因素。这两个列表具有相同的名称,对于第一个列表中的每个元素,我想在第二个列表中找到对应的列表。

列表如下:

DEGs <- list(element1="path",
             element2="path",
             element3="path",
             element3="path",

等...

我的代码就是这个:

for (i in list1) {
  for (k in list2) {
    if (names(i) == names(k)) {
      print paste0(i, " = ", k)
    }
  }
}

我当然会使用文件而不是使用print来加载文件并进行一些操作,但是在此之前,我会收到此错误:

Error: unexpected symbol in:
"    if (names(i) == names(k)) {
      print paste0"
>     }
Error: unexpected '}' in "    }"
>   }
Error: unexpected '}' in "  }"
> }
Error: unexpected '}' in "}"
>

有人知道这个问题吗?可以肯定的是,它是微不足道的。 非常感谢

1 个答案:

答案 0 :(得分:3)

R中,print是一个函数

for (i in list1) {
  for (k in list2) {
    if (names(i) == names(k)) {
      print(paste0(i, " = ", k))
    }
  }

除了上述问题外,提取的names(i)中的list无法正常工作,因为它正在提取并返回vector,即进行list[[1]]list1[[2]]

list1 <- list(element1 = 'a', element2 = 'b')
list2 <- list(element1 = 'c', element2 = 'd')

for(i in list1) print(i)
#[1] "a"
#[1] "b"

相反,它可以遍历名称

for(nm1 in names(list1)) {
   for(nm2 in names(list2)) {
       if(nm1 == nm2){ print(paste0(list1[[nm1]], " = ", list2[[nm2]]))
    }
     }
    }

此外,paste是矢量化的,并且由于list元素的矢量长度为1,

paste(list1, list2, sep=" = ")

应该工作或使用Map

unlist(Map(paste, list1, list2,  MoreArgs = list(sep = " = ")))