1
我在读这本书的数据挖掘与R'和跨越这些代码来:为什么这两个R对象不一样?
library(DMwR)
clean.algae <- knnImputation(algae, k = 10)
x <- sapply(names(clean.algae)[12:18],
function(x,names.attrs) {
f <- as.formula(paste(x,"~ ."))
dataset(f,clean.algae[,c(names.attrs,x)],x)
},
names(clean.algae)[1:11])
我想x
可以改写为:
y <- sapply(names(clean.algae)[12:18],
function(x) {
f <- as.formula(paste(x,"~ ."))
dataset(f,clean.algae[,c(names(clean.algae)[1:11],x)],x)
}
)
然而,identical(x,y)
回报FALSE
。
我决定调查为什么把我的注意力仅限于这些列表的第一个元素。
我发现:
identical(attributes(x[[1]])$data,
attributes(y[[1]])$data)
[1] FALSE
然而:
which(!(attributes(x[[1]])$data == attributes(y[[1]])$data))
integer(0)
这对我来说意味着在数据帧中的所有元素是相等的,因此,两个数据帧必须相同。为什么不是这种情况?
我也有对象的公式属性类似的问题:
> identical(attributes(x[[1]])$formula,
+ attributes(y[[1]])$formula)
[1] FALSE
>
> attributes(x[[1]])$formula == attributes(y[[1]])$formula
[1] TRUE
看看'相同'和'all.equal' [这里]之间的区别(http://stackoverflow.com/questions/3395696/difference-in-r-between-identicalx-y-and-istrueall -equalx-y)并阅读“比较”。 –
不可重现;我们如何构建'clean.algae'?有一点要记住的是,“相同”大概是关注环境,而“all.equal”不会(我认为)。 –
@BenBolker我道歉。我更新了代码片段以使其可重现。数据框与环境没有任何关系。你能澄清一下吗? – mauna