如何动态生成数据框变量名称并用它来寻址现有数据框变量?
How to generate data frame variable name on the fly and address existing data frame variable with it?
我想做这样的事情:
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
内容。
问题:我这样做的主要原因是我想用动态生成的变量名来处理数据框变量。我不想生成新的变量名,我只想为现有的变量名生成可用于寻址的变量名。我怎样才能做到这一点?
你可以在这里使用eval, parse(
eval(parse(text = paste0("df$v", a)))
#[1] 1 2 3
但是,我认为这不是访问变量的好方法。除了即时生成 df$v2
之外,您能否仅即时生成 v2
以便您可以执行
df[[paste0("v", a)]]
#[1] 1 2 3
简答:使用 [[
而不是 $
,例如df[[paste0("v",a)]]
.
一般不推荐get()
,但如果需要使用,则必须分两步进行:
get("df")[[paste0("v",a)]]
(正如@RonakShah 所建议的,假设您知道您将要查看 df
并使用 df[[paste0("v",a)]]
)
如果坚持使用$
,可以使用eval(parse(.))
:
eval(parse(text=paste0("df$v",a)))
我想做这样的事情:
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
内容。
问题:我这样做的主要原因是我想用动态生成的变量名来处理数据框变量。我不想生成新的变量名,我只想为现有的变量名生成可用于寻址的变量名。我怎样才能做到这一点?
你可以在这里使用eval, parse(
eval(parse(text = paste0("df$v", a)))
#[1] 1 2 3
但是,我认为这不是访问变量的好方法。除了即时生成 df$v2
之外,您能否仅即时生成 v2
以便您可以执行
df[[paste0("v", a)]]
#[1] 1 2 3
简答:使用 [[
而不是 $
,例如df[[paste0("v",a)]]
.
get()
,但如果需要使用,则必须分两步进行:
get("df")[[paste0("v",a)]]
(正如@RonakShah 所建议的,假设您知道您将要查看 df
并使用 df[[paste0("v",a)]]
)
如果坚持使用$
,可以使用eval(parse(.))
:
eval(parse(text=paste0("df$v",a)))