对于具有一列为硫酸盐的数据框(数据),
data[["sulfate"]]
和data[[colnames(data)=="sulfate"]]
有什么区别?
data["sulfate']
和data[colnames(data)=="sulfate"]
产生相同值的结果,并且具有数据帧类,但是在我的情况下,data[["sulfate"]]
结果成为数字矢量,但是data[[colnames(data)=="sulfate"]]
却是错误。为什么?
答案 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"]]
时的错误相同