使用[[时,R错误子集data.frame

时间:2018-09-09 19:58:59

标签: r dataframe subset

对于具有一列为硫酸盐的数据框(数据), data[["sulfate"]]data[[colnames(data)=="sulfate"]]有什么区别?

data["sulfate']data[colnames(data)=="sulfate"]产生相同值的结果,并且具有数据帧类,但是在我的情况下,data[["sulfate"]]结果成为数字矢量,但是data[[colnames(data)=="sulfate"]]却是错误。为什么?

Picture showing the error.

1 个答案:

答案 0 :(得分:0)

首先-以下是实现您要实现的目标的一些方法:

data$sulfate

getElement(data, "sulfate")

接下来简要说明data[[colnames(data)=="sulfate"]]为什么不起作用。

1)[[中的表达式是colnames(data)=="sulfate",它是逻辑向量。

2)函数[[接受单个元素(因为它用于选择单个元素)或数字矢量,在这种情况下,它用于选择嵌套列表的元素。例如:

a <- list(list(2,3), list(3,4))
> a[[c(2,1)]]
[1] 3

帮助页面 help(`[[`)”将提供有关其工作方式的更多信息。

3)R中的data.frame对象是一个列表,您可以通过执行is.list(data)来确认。因此,功能[[的工作方式相同。

现在,当您将向量传递给它而不是一个数字时,会发生什么-它变成了0和1的数字表示形式。例如,检查as.numeric(colnames(data)=="sulfate"))

然后,子集[[遇到0个条目,并且当您尝试使用0进行子集设置时,会引发错误,表示您试图选择少于一个元素。

data[[0]]

请注意,该错误与进行data[[colnames(data)=="sulfate"]]时的错误相同