Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R what';s选择向量时[[X]]和[,X]之间的差异_R_Vector_Dplyr - Fatal编程技术网

在R what';s选择向量时[[X]]和[,X]之间的差异

在R what';s选择向量时[[X]]和[,X]之间的差异,r,vector,dplyr,R,Vector,Dplyr,既然df1和df2本质上是“相同”的,为什么我会在上面的代码块中得到真/假二分法。已更改的tibble()属性是什么 同样的问题以另一种方式提出-当应用于基数R时,以及在tidyverse中使用时,[[X]]]和[,X]之间有什么区别?由于所有列表都是向量,我们可以从列表子集的角度来考虑这一点。例如: identical(df1[[2]], df1[, 2]) # [1] TRUE identical(df2[[2]], df2[, 2]) # [1] FALSE 我们得到与df1[,2]相同

既然
df1
df2
本质上是“相同”的,为什么我会在上面的代码块中得到真/假二分法。已更改的
tibble()
属性是什么


同样的问题以另一种方式提出-当应用于基数R时,以及在tidyverse中使用时,
[[X]]]
[,X]
之间有什么区别?

由于所有列表都是向量,我们可以从列表子集的角度来考虑这一点。例如:

identical(df1[[2]], df1[, 2])
# [1] TRUE
identical(df2[[2]], df2[, 2])
# [1] FALSE
我们得到与
df1[,2]
相同的输出,因此
相同(df1[[2]],df1[,2])
返回
TRUE
。 第二部分是关于
tible
结构,即:

df1[[2]] 
第二个是
列表
,而
第一个
是向量,因此
相同
返回

tbl_df类的对象有:(来自文档)

c的class属性(“tbl\u df”、“tbl”、“data.frame”)

一种基本类型的“列表”,其中列表的每个元素都具有相同的NROW()

一种名称属性,它是与基础列表长度相同的字符向量


row.names属性,包括该属性是为了与基本data.frame类兼容。此属性仅用于查询行数,大多数TIBLE方法都会忽略可能存储在其中的任何行名称。

所有列表都是向量,但并非所有向量都是列表。现在,如果您想到列表子集,那么
df1[[2]]df1[,2]
应该是清楚的[是通用函数。R中的类可以自由决定如何响应这些调用。
数据。帧
TIBLES
可以做不同的事情。对于R中的所有对象,没有真正的方法来回答这个问题。例如:
x
L <- list(A = c(1, 2), B = c(1, 4))
L[[2]]
df1[[2]] 
typeof(as_tibble(df1)[[2]])
[1] "double"
typeof(as_tibble(df1[, 2]))
[1] "list"