假设我有一个数据框,其中有一列的名称存储在变量中。使用方括号符号很容易使用变量访问此列:
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()
提供与括号相同的结果?
您可以使用get
:
with(df, get(column.name))
您使用“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())