有没有办法直接在R中表达“一列设置为空”的数据帧?

时间:2013-11-19 22:14:44

标签: r

考虑以下习语,其中foo是某些数据框,barfoo的某些列。

假设我想在某个函数foo中使用f,但我想在没有列foo的情况下使用bar。这是一种方法。

foo$bar <- NULL
f(foo)

但是,这种方式要求我更改foo,这意味着我必须将bar存储在单独的变量中,然后再将其恢复。这是另一种方法:

tfoo <- foo
tfoo$bar <- NULL
f(tfoo)

在这里,我被迫制作一个单独的变量,以避免更改foo。 我的问题是,有没有办法在一行中表达“foo没有bar”的想法?也就是说,我想写一些类似于语法有效的东西。

f(foo[,-bar])

1 个答案:

答案 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()构造。