dput的row.names与从rownames()返回的不一致。为什么?

时间:2018-07-30 11:08:01

标签: r dataframe rowname

(添加了可复制的示例)。考虑以下示例:

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的{​​{1}}(即row.namesNA)与从-2L返回的值(即rownames())不一致,1)。为什么?

PS1:有人可以添加2标签,我没有足够的声誉来做到这一点(即1500分)吗?

PS2:What's the difference between row.names() and attributes$row.names?有一个类似的问题。在链接中,使用dputrow.names(均带点)。但是,在此问题中,出现$row.namesrownames(无点和点缀)。也就是说,给定的链接是有帮助的,可以极大地解决问题。

1 个答案:

答案 0 :(得分:1)

handleAddList(s) { this.setState({lists :this.state.lists.concat([s]) }); } 为您或您的程序提供了一些阅读和理解的内容(以一致且可预测的格式)。

与此相反,handleAddList(s) { this.setState({lists :this.state.lists.concat([s]) }, () => { console.log(this.state.lists)}); } row.names()的格式给出dput(),以使row.names=了解从attributes()收到它的情况,这与行名存储在内部的方式有关数据框。 structure()表示它们是从1到x的自动生成的名称。

c(NA, -xL)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")) 没有选择dput(),但是在第三项测试中却选择了2:4