Во-первых, не очень разумно использовать имена переменных с пробелами.Вместо этого используйте точки, например "Group.1"
.
Секунда, в то время как c("Group 1","Group 2")
работает, -c("Group 1","Group 2")
не будет, потому что вы пытаетесь делать арифметику с символами: - "Group.1"
не имеет особого смысла, Является ли?
Таким образом, мы можем использовать %in%
, который является своего рода оператором сопоставления, вместе с which()
, который дает индексы элементов.
remover <- function(input) {
input <- input[, -which(names(input) %in% c("Group.1", "Group.2"))]
return(input)
}
x1 <- remover(df1)
> x1
X1 X2
1 4 10
2 5 11
3 6 12
Существует еще одна опция для достижения отрицанияимена вместо -
.Мы можем использовать !
.
remover2 <- function(input) {
input <- input[, which(!names(input) %in% c("Group.1", "Group.2"))]
return(input)
}
При использовании !
.
Unit: microseconds
expr min lq mean median uq max neval cld
remover(df1) 26.789 28.065 30.27720 28.321 28.831 18419.152 1e+05 a
remover2(df1) 26.534 27.810 30.09483 28.065 28.576 6056.713 1e+05 a
> all.equal(x1, x2)
[1] TRUE
Данные:
* 1026 может быть незначительным*