有时我的代码会根据某些变量 ID 引用特定数据集。然后我一直在使用 paste0
创建代码行,然后使用 eval(parse(...))
该行来执行代码。随着代码长度的增加,这似乎变得草率了。有没有更简洁的方法来获取动态数据引用?
例子:
dataset <- "dataRef"
execute <- paste0("data.frame(", dataset, "$column1, ", dataset, "$column2)")
eval(parse(execute))
但是现在想象一个场景,1000行代码会调用dataRef,有时需要改成dataRef2或dataRefX。
最佳答案
结合 Jack Maney 和 G.Grothendieck 的评论:
最好将要通过变量访问的数据框存储在列表中。可以使用 get
从名称向量创建列表:
mynames <- c('dataRef','dataRef2','dataRefX')
# or mynames <- paste0( 'dataRef', 1:10 )
mydfs <- lapply( mynames, get )
然后你的例子变成:
dataset <- 'dataRef'
mydfs[[dataset]][,c('column1','column2')]
或者您可以使用 lapply
、sapply
或循环一次处理它们:
mydfs2 <- lapply( mydfs, function(x) x[,c('column1','column2')] )
关于r - 是否有更有效/更干净的方法来设置 eval(parse(paste0( 设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18518273/