我非常担心这个问题已经被提出来并且将被否决,但是我没有在文档中找到答案(?“ [”),并且发现它很难搜索。
data(wines)
# This is allowed:
alcoholic <- wines[, 1]
alcoholic <- wines[, "alcohol"]
nonalcoholic <- wines[, -1]
# But this is not:
fail <- wines[, -"alcohol"]
我知道两种解决方案,但对它们的需求感到沮丧。
win <- wines[, !colnames(wines) %in% "alcohol"] # snappy
win <- wines[, -which(colnames(wines) %in% "alcohol")] # snappier!
最佳答案
当你做
wines[, -1]
在
-1
使用[
之前先对其进行评估。如您所知,-
一元运算符不适用于character
类的对象,因此对“酒精”进行相同操作将导致您:Error in -"alcohol" : invalid argument to unary operator
您可以将以下内容添加到备选方案中:
wines[, -match("alcohol", colnames(wines))]
wines[, setdiff(colnames(wines), "alcohol")]
但是您应该了解负索引的风险,例如,查看错误键入“ alcool”会发生的情况(如此)。因此,您的第一个建议和最后一个建议(@Ananda的建议)应该是首选。如果您提供的名称不属于数据的一部分,您可能还想编写一个会出错的函数。