dput 的 row.names 与 rownames() 返回的不一致。为什么?
dput's row.names are inconsistent with the ones returned from rownames(). Why?
(添加了可重现的示例)。考虑以下示例:
df <- as.data.frame(matrix(c(1,2,3, 11,12,13), nrow = 2, ncol=3))
# V1 V2 V3
# 1 1 3 12
# 2 2 11 13
rownames(df) # "1" "2"
dput(df)
# structure(list(V1 = c(1, 2), V2 = c(3, 11), V3 = c(12, 13)), .Names = c("V1",
# "V2", "V3"), row.names = c(NA, -2L), class = "data.frame")
dput
的row.names
(即NA
、-2L
)与rownames()
返回的不一致(即1
, 2
).为什么?
PS1: 有人可以添加 dput
标签吗,我没有足够的声望来做(即 1500 分)?
PS2: What's the difference between row.names() and attributes$row.names?也有类似的问题。在 link、row.names
和 $row.names
(均带点)中使用。然而,在这个问题中,出现了 rownames
和 row.names
(无点和带点)。也就是说,给定的 link 很有帮助,可以极大地解决问题。
row.names()
为您或您的程序提供阅读和理解的内容(以一致且因此可预测的格式)。
然而,dput()
以 attributes()
的格式给出 row.names=
以理解从 structure()
收到它,并且它与行名称的内部方式有关存储在数据框中。 c(NA, -xL)
表示它们是从 1 到 x 自动生成的名称。
row.names()
和 dput()
之间有一些有趣的变化:
df1 <- data.frame(list(a = 1:3, b = 3:1))
row.names(df1) # "1" "2" "3"
dput(df1) # row.names=c(NA, -3L)
df2 <- df1[-2,]
row.names(df2) # "1" "3"
dput(df2) # row.names=c(1L, 3L)
df2 <- df1[-1,]
row.names(df2) # "2" "3"
dput(df2) # row.names=2:3
row.names(df1) <- 3:1
row.names(df1) # "3" "2" "1"
dput(df1) # row.names=c(3L,2L,1L)
row.names(df1) <- as.numeric(c(2,3,4))
row.names(df1) # "2" "3" "4"
dput(df1) # row.names=c("2","3","4"))
只有在最后一次测试中它们才相同,而且有趣的是,即使是一个数值向量又被强制为数值,return 它们都是字符向量。由于某种原因 dput()
没有选择 2:4
,但它在第三次测试中选择了 2:3
。
(添加了可重现的示例)。考虑以下示例:
df <- as.data.frame(matrix(c(1,2,3, 11,12,13), nrow = 2, ncol=3))
# V1 V2 V3
# 1 1 3 12
# 2 2 11 13
rownames(df) # "1" "2"
dput(df)
# structure(list(V1 = c(1, 2), V2 = c(3, 11), V3 = c(12, 13)), .Names = c("V1",
# "V2", "V3"), row.names = c(NA, -2L), class = "data.frame")
dput
的row.names
(即NA
、-2L
)与rownames()
返回的不一致(即1
, 2
).为什么?
PS1: 有人可以添加 dput
标签吗,我没有足够的声望来做(即 1500 分)?
PS2: What's the difference between row.names() and attributes$row.names?也有类似的问题。在 link、row.names
和 $row.names
(均带点)中使用。然而,在这个问题中,出现了 rownames
和 row.names
(无点和带点)。也就是说,给定的 link 很有帮助,可以极大地解决问题。
row.names()
为您或您的程序提供阅读和理解的内容(以一致且因此可预测的格式)。
然而,dput()
以 attributes()
的格式给出 row.names=
以理解从 structure()
收到它,并且它与行名称的内部方式有关存储在数据框中。 c(NA, -xL)
表示它们是从 1 到 x 自动生成的名称。
row.names()
和 dput()
之间有一些有趣的变化:
df1 <- data.frame(list(a = 1:3, b = 3:1))
row.names(df1) # "1" "2" "3"
dput(df1) # row.names=c(NA, -3L)
df2 <- df1[-2,]
row.names(df2) # "1" "3"
dput(df2) # row.names=c(1L, 3L)
df2 <- df1[-1,]
row.names(df2) # "2" "3"
dput(df2) # row.names=2:3
row.names(df1) <- 3:1
row.names(df1) # "3" "2" "1"
dput(df1) # row.names=c(3L,2L,1L)
row.names(df1) <- as.numeric(c(2,3,4))
row.names(df1) # "2" "3" "4"
dput(df1) # row.names=c("2","3","4"))
只有在最后一次测试中它们才相同,而且有趣的是,即使是一个数值向量又被强制为数值,return 它们都是字符向量。由于某种原因 dput()
没有选择 2:4
,但它在第三次测试中选择了 2:3
。