具有功能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。我想念什么?
答案 0 :(得分:1)
要检查data.frame
中terms
的每个组合
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