使用with()从R数据框访问任意列

时间:2010-04-10 18:17:25

标签: r dataframe

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

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()将提供与括号相同的结果?

2 个答案:

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

相关问题