我非常担心这个问题已经被提出来并且将被否决,但是我没有在文档中找到答案(?“ [”),并且发现它很难搜索。

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的建议)应该是首选。如果您提供的名称不属于数据的一部分,您可能还想编写一个会出错的函数。

10-06 05:25