如何从环境中获取数据帧列表以供后来的lapply()魔法使用?
我想要一个自动的方式来获取我的许多数据集的一个子集的nrow()
。我有大量的DF都遵循一个命名方案,并且我想在这些方案上运行nrow()
。这是我想出了:如何从环境中获取数据帧列表以供后来的lapply()魔法使用?
# 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(...))
会给出错误的结果。
任何指针非常感谢!
回答:
尝试
lapply(mget(ls(pattern = "^test")), nrow) ## $test_10
## [1] 10
##
## $test_5
## [1] 5
您可以使用data.frame
或do.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
以上是 如何从环境中获取数据帧列表以供后来的lapply()魔法使用? 的全部内容, 来源链接: utcz.com/qa/261710.html