如何获取环境中的数据帧列表以供以后的lapply()魔术?

时间:2014-10-29 10:43:17

标签: r lapply sapply

我想获得一种自动获取我的众多数据集子集的nrow()的方法。我有大量的DF都遵循命名方案,我想在每个DF上运行nrow()。这就是我想出的:

# generate two relevant and one irrelevant DF
test_5 <- data.frame(rnorm(5))
test_10 <- data.frame(rnorm(10))
irrelevant_df <- data.frame(rnorm(5))

# I want this, but automatically over all test_ DFs
nrow(test_5)
nrow(test_10)

# get all DFs that follow the 'test_' naming scheme
v <- grep('test_', ls(), value = TRUE)
v
l <- as.list(grep('test_', ls(), value = TRUE))
l

# works, but is manual
sapply(list(test_5, test_10), function(x) nrow(x))
# doesn't work (returns NULL), because l,v is stored as chr?
sapply(v, function(x) nrow(x))
sapply(l, function(x) nrow(x))

有没有办法从ls()获取对象,以便我可以将结果推送到{s,l}应用函数?

作为奖励问题,是否可以按顺序获取ls()个对象的列表?由于v按字母顺序存储,因此后来的rbind(v, sapply(...))会产生错误的结果。

任何指针都非常感谢!

1 个答案:

答案 0 :(得分:4)

尝试

lapply(mget(ls(pattern = "^test")), nrow)
## $test_10
## [1] 10
##
## $test_5
## [1] 5

如果您想要合并,也可以使用data.framedo.call + rbind组合,例如

data.frame(lapply(mget(ls(pattern = "^test")), nrow))
##   test_10 test_5
## 1      10      5 

或者

do.call(rbind, lapply(mget(ls(pattern = "^test")), nrow))
##         [,1]
## test_10   10
## test_5     5