Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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 为什么数据框列上的$和[给出不同的输出表示和数据类型?_R_Vector_Dataframe_Printing_Extract - Fatal编程技术网

R 为什么数据框列上的$和[给出不同的输出表示和数据类型?

R 为什么数据框列上的$和[给出不同的输出表示和数据类型?,r,vector,dataframe,printing,extract,R,Vector,Dataframe,Printing,Extract,我是R的新手。只是通过在线教程学习。我的问题是: 1) 为什么使用不同的语法访问同一列会有不同的输出表示 垂直显示: > airquality["Ozone"] Ozone 1 41 2 36 3 12 airquality$Ozone [1] 41 36 12 18 NA 28 23 19 8 [46] NA 21 37 20 12 13 NA NA NA [91] 64 59 39 9 16

我是R的新手。只是通过在线教程学习。我的问题是:

1) 为什么使用不同的语法访问同一列会有不同的输出表示

垂直显示:

> airquality["Ozone"]
    Ozone
1      41
2      36
3      12
airquality$Ozone
[1]  41  36  12  18  NA  28  23  19   8 
[46]  NA  21  37  20  12  13  NA  NA  NA
[91]  64  59  39   9  16  78  35  66 122
水平显示:

> airquality["Ozone"]
    Ozone
1      41
2      36
3      12
airquality$Ozone
[1]  41  36  12  18  NA  28  23  19   8 
[46]  NA  21  37  20  12  13  NA  NA  NA
[91]  64  59  39   9  16  78  35  66 122
2) 为什么下面的数据类型不同

> class(airquality["Ozone"])
[1] "data.frame"
> class(airquality$Ozone)
[1] "integer"
> class(airquality[["Ozone"]])
[1] "integer"

两者的原因相同:
airquality[“Ozone”]
返回一个数据帧,而
airquality$Ozone
返回一个向量。
class()
显示它们的对象类型。
str()
也有助于简洁地显示对象

请参阅上的帮助(也称为“提取”),或函数
getElement()
。在R中,您可以对特殊字符或运算符调用
help()
,只需在其周围加上引号:
?“['
?'$”
(在Python/C++/Java或大多数其他语言中,我们称之为“切片”)

至于它们打印方式不同的原因,R在引擎盖下分配了一种特定于对象的打印方法。在这种情况下:,它垂直打印数据框列,带有行索引,而不是
打印
(或
打印。默认值
)对于向量,它只水平打印向量内容,没有索引

现在回到使用“[”vs“$”运算符进行提取:

“[”、“[[”和“$”之间最重要的区别是“[”可以选择多个元素,而另外两个“[]”和“$”可以选择单个元素

还有一个“[[]”提取语法,它将像“$”一样选择单个元素(向量):

[[“colname”]
$colname
之间的区别在于,在前者中,列名可以来自变量,但在后者中,它必须是字符串。因此
[[varname]]
允许您根据
varname
的值对不同的列进行索引

阅读有关
extract()
上的
exact=TRUE
drop=TRUE
选项的文档。注意
drop=TRUE
仅适用于数组/矩阵,而不适用于数据帧,其中它被忽略:

airquality["Ozone", drop=TRUE]
In `[.data.frame`(airquality, "Ozone", drop = TRUE) :
  'drop' argument will be ignored
这一切都有点让人困惑,一开始让人不快,奇怪的不同,奇怪的不自解释。但一旦你学会了语法,它就有了意义。在那之前,你的头就像撞上了一堵符号墙

请简单浏览一下和HTML或PDF格式。将它们加入书签并定期返回。在公共汽车或飞机上阅读它们

正如@Henry提到的,严格来说,在访问数据帧时,我们应该插入一个逗号来消除列名应用于列而不是行的歧义:
airquality[,“Ozone”]
。如果我们使用数字索引,
airquality[,1]
airquality[1]
都提取Ozone列,而
airquality[1,]
提取第一行。R应用了一些技巧,因为字符串通常不是行索引


无论如何,它都在文档中…不一定都是连续的或解释清楚的…欢迎来到R:-)

也值得比较一下你从
空气质量[“臭氧”]
(一个数据框)得到的数据和你用一个额外的逗号
空气质量[,“臭氧”]
(一个类似
空气质量$Ozone
)得到的数据,而两者都是
空气质量[c](“臭氧”,“温度”)]
空气质量[,c(“臭氧”,“温度”)]
给出数据框架感谢“smci”"。你的解释很有道理。确实,所有这些变体都令人困惑,尤其是为什么需要它?到目前为止,我认为,提供这些变体是为了让程序员在数据操作方面有更多的自由。我认为,一旦我更深入地了解复杂的数据操作,所有这些变体都会有意义,感谢这份文档链接。还有很多。不客气。我建议的快速入门是浏览一下手册,阅读数百个快速入门指南或教程中的任意一个(尝试一些,如果你不喜欢,请阅读另一个)。此外,还知道如何获取任何操作符、函数或包的
help()
。并查看
vignette('PackageName'))
用于特定软件包的快速启动。使用SO、R-bloggers、github、Kaggle等查找好的代码示例。@jogo:不,这个问题是关于访问列表,而不是数据帧。(是的,我们知道数据帧也是以列表的形式实现的,但这会让新用户大吃一惊。不管怎样,数据帧切片的语法不同,它还允许一个可选的行索引)@jogo:实际上,它的标题有误导性(我刚刚修复了它),正文上说的是“列表或数据帧”。但是它没有提到“$”,所以它不是这个的超集。而且它没有任何代码示例,所以它作为一个规范问题很糟糕。唉……最基本的R问题之一是怎么在这里出现了8年,没有人费心修改标题的?你不能做
向量$index
。但是你可以做
数据框$colname
mci我把这个链接作为附加信息提供——这并不意味着这个问题是重复的。