首页 > 解决方案 > 如何动态生成数据框变量名称并使用它来处理现有数据框变量?

问题描述

我想做这样的事情:

df <- data.frame("v1"=c(1,2,3), "v2"=c(1,2,3), "v3"=c(1,2,3), "v4"=c(1,2,3))

a <- 2

paste0("df$v", a)
get(paste0("df$v", a))
mget(paste0("df$v", a))

输出应该是df$v2控制台中打印的内容。

问题:我这样做的主要原因是我想用动态生成的变量名来处理数据框变量。我不想生成新的变量名,我只想为现有的变量名生成可用于寻址它的变量名。我怎样才能做到这一点?

标签: rmetaprogramming

解决方案


你可以eval, parse(在这里使用

eval(parse(text = paste0("df$v", a)))
#[1] 1 2 3

但是,我认为这不是访问变量的好方法。df$v2你可以只动态生成,而不是动态生成v2,这样你就可以做到

df[[paste0("v", a)]]
#[1] 1 2 3

推荐阅读