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