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