library(tidyverse)
df0 <- data.frame(col1 = c(5, 2), col2 = c(6, 4))
df1 <- data.frame(col1 = c(5, 2),
col2 = c(6, 4),
col3 = ifelse(apply(df0[, 1:2], 1, sum) > 10 &
df0[, 2] > 5,
"True",
"False"))
df2 <- as_tibble(df1)
我在上面得到了我的数据框 df1
。我基本上将其“复制”为小标题 df2
。让我们模拟对此 df1
数据框和 df2
tibble 的分析。
identical(df1[[2]], df1[, 2])
# [1] TRUE
identical(df2[[2]], df2[, 2])
# [1] FALSE
因为 df1
和 df2
本质上是“相同的”,为什么我在上面的代码块中得到了 TRUE/FALSE 二分法。发生变化的 tibble()
属性是什么?
同样的问题以另一种方式提出 - [[X]]
和 [, X]
有什么区别,应用于基础 R 时,以及使用时在 tidyverse 中?
最佳答案
由于所有列表都是向量,我们可以从列表子集的角度来考虑这一点。举个例子:
L <- list(A = c(1, 2), B = c(1, 4))
L[[2]]
此提取
是列表的第二个元素。将此推断为:
df1[[2]]
我们得到与 df1[, 2]
相同的输出,因此 identical(df1[[2]], df1[, 2])
返回 TRUE
。
第二部分是关于 tibble
结构的,即:
typeof(as_tibble(df1)[[2]])
[1] "double"
typeof(as_tibble(df1[, 2]))
[1] "list"
第二个是列表
,而第一个
是一个向量,因此identical
返回FALSE
。
类 tbl_df 的对象有:(来自文档)
c("tbl_df", "tbl", "data.frame")
的类属性。
“列表”的基本类型,其中列表的每个元素都具有相同的 NROW()。
一个名称属性,它是一个与底层列表长度相同的字符向量。
一个 row.names 属性,用于与基本 data.frame 类兼容。仅查询此属性以查询行数,大多数 tibble 方法都会忽略可能存储在那里的任何行名称。
关于r - 在 R 中,选择向量时 [[X]] 和 [, X] 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55869141/