9

假设我有一个数据框,其中有一列的名称存储在变量中。使用方括号符号很容易使用变量访问此列:

df <- data.frame(A = rep(1, 10), B = rep(2, 10))
column.name <- 'B'

df[,column.name]

但是如何使用调用来访问任意列并不明显with()。天真的方法

with(df, column.name)

column.name在调用者的环境中有效地评估。如何充分延迟评估以with()提供与括号相同的结果?

4

2 回答 2

17

您可以使用get

with(df, get(column.name))
于 2010-04-10T19:48:51.583 回答
1

您使用“with”来创建一个本地化的临时命名空间,在其中评估某个表达式。在上面的代码中,您没有传入表达式。

例如:

data(iris)   # this data is in your R installation, just call 'data' and pass it in

通常,您必须像这样在数据框中引用变量名称:

tx = tapply(iris$sepal.len, list(iris$species), mean)

除非你这样做:

attach(iris)

使用 'attach' 的问题是命名空间冲突的可能性,所以你必须记住调用 'detach'

使用 'with' 更简洁:

tx = with( iris, tapply(sepal.len, list(species), mean) )

因此,调用签名(非正式地)是:with(data, function())

于 2010-04-10T19:12:02.400 回答