【发布时间】:2016-01-05 15:42:16
【问题描述】:
我对 R 还是很陌生,我很难正确地措辞这个问题,所以如果这是重复的,我提前道歉。
我有一个固定长度列表的列表,所有列表都具有相同的命名成员。这是我的haystack。
我有一个包含命名成员的列表,但有些丢失了。这是我的needle。
如果needle 存在于haystack 中,我想返回一个简单的TRUE/FALSE。
示例:
这应该返回 TRUE:needle 的所有成员都匹配 haystack[[1]],即使它缺少 c
haystack <- list( list(a = 1, b = 2, c = 3), list(a = 4, b = 5, c = 6) )
needle <- list(a = 1, b = 2)
something(needle, haystack)
这应该返回 FALSE:needle 的值与 haystack[[1]] 匹配,但它们的名称不同
haystack <- list( list(a = 1, b = 2, c = 3), list(a = 4, b = 5, c = 6) )
needle <- list(x = 1, y = 2)
something(needle, haystack)
这应该返回 FALSE:a = 1 和 b = 5 存在于 haystack 中,但不在同一个列表中
haystack <- list( list(a = 1, b = 2, c = 3), list(a = 4, b = 5, c = 6) )
needle <- list(a = 1, b = 5)
something(needle, haystack)
到目前为止,我发现的最接近的是 lapply(haystack, match, table = needle),但 A) 它不尊重名称匹配和 B) 我不确定如何将其结果转换为逻辑结果。
如果有一个库可以让这更容易,请随时将其合并到您的答案中。
【问题讨论】:
-
“我有一个固定长度的列表,所有的成员都具有相同的名称。” -- 使用 data.frame:
x = do.call(rbind.data.frame, haystack)或类似的。 -
@Frank - 在我的工作结束时,我做 将结果转换为数据框。我仍在学习 R 语言,而且我更熟悉操作列表而不是操作数据框。 :(