R:确定列表中的数据帧是否相同

时间:2018-07-17 13:31:51

标签: r dataframe lapply

具有功能f

f <- function(x) { data.frame(a=c(x, 2*x), b=c(2*x, 4*x)) }

我们可以构造两个数据帧

df1 <- f(5)
df2 <- f(5)

,并希望确认它们是否相等。因为我们ultimately要获取布尔值,所以我们使用identical,实际上是

identical(df1, df2)

计算为TRUE。

现在我们计算三个项

terms <- lapply(rep(5, 3), f)

,并想确定三个数据帧是否相等。我们选择与第一项比较

first.term <- terms[1]

并评估

lapply(terms,
       function(x) identical(x, first.term))

但是我们得到三个FALSE,而不是三个TRUE。我想念什么?

2 个答案:

答案 0 :(得分:1)

要检查data.frameterms的每个组合

apply(combn(length(terms), 2), 2, function(x)
    all.equal(terms[[x[1]]], terms[[x[2]]]))
#[1] TRUE TRUE TRUE

返回data.frame中的所有terms是否相同

all(apply(combn(length(terms), 2), 2, function(x)
    all.equal(terms[[x[1]]], terms[[x[2]]])))
#[1] TRUE

答案 1 :(得分:0)

OP代码中的问题是使用`[`而不是`[[`。前者返回一个包含data.frame的列表,而后者返回该data.frame

first.term <- terms[[1]]
lapply(terms, function(x) identical(x, first.term))
#[[1]]
#[1] TRUE
#
#[[2]]
#[1] TRUE
#
#[[3]]
#[1] TRUE