【发布时间】:2017-07-19 20:05:48
【问题描述】:
我在玩一些数据帧时遇到了一个奇怪的行为:当我创建两个相同的数据帧a,b,然后交换它们的行名时,它们的结果并不相同:
rm(list=ls())
a <- data.frame(a=c(1,2,3),b=c(2,3,4))
b <- a
identical(a,b)
#TRUE
identical(rownames(a),rownames(b))
#TRUE
rownames(b) <- rownames(a)
identical(a,b)
#FALSE
谁能重现/解释原因?
【问题讨论】:
-
看起来行名最初是数字,但
rownames()返回一个字符向量,因此行名最终成为不同类型的属性。 -
您可以检查结构,即
c(NA, -3L)是第一个case更改为c("1", "2", "3") -
不要使用
identical来比较数据帧。使用all.equal(a,b)告诉您名称不同。