考虑以下习语,其中foo
是某些数据框,bar
是foo
的某些列。
假设我想在某个函数foo
中使用f
,但我想在没有列foo
的情况下使用bar
。这是一种方法。
foo$bar <- NULL
f(foo)
但是,这种方式要求我更改foo
,这意味着我必须将bar
存储在单独的变量中,然后再将其恢复。这是另一种方法:
tfoo <- foo
tfoo$bar <- NULL
f(tfoo)
在这里,我被迫制作一个单独的变量,以避免更改foo
。
我的问题是,有没有办法在一行中表达“foo
没有bar
”的想法?也就是说,我想写一些类似于语法有效的东西。
f(foo[,-bar])
答案 0 :(得分:1)
f( foo[-grep("^bar$", names(foo)] )
您需要使用数值进行负索引。您还可以使用“否定”逻辑索引“
f( foo[ !names(foo) %in% "bar" ] )
这对于交互式使用也是可以的:
f( subset(foo, select= -bar) )
您可能会看到一条建议的回复:
f( foo[ -which(names(foo) == "bar") ] )
...但通常应该避免-which()
构造。