8

如何获取当前环境中可用的数据框名称向量?我试过了:

sapply(ls(), is.data.frame)

但这失败了,因为ls返回字符串向量。我打算将此列表用作 Shiny 应用程序中动态选择的输入。

4

4 回答 4

16

您可以使用eapply循环遍历环境中的对象:

x <- 1:10
y <- mtcars
eapply(.GlobalEnv,is.data.frame)
$x
[1] FALSE

$y
[1] TRUE

names(which(unlist(eapply(.GlobalEnv,is.data.frame))))
[1] "y"
于 2013-10-30T14:55:18.463 回答
6

我认为您是在询问这些数据框的实际名称,而不是数据框本身?你可以做:

l <- ls()
l[sapply(l, function(x) is.data.frame(get(x)))]

get()将返回给定角色名称的对象的值。


做基本相同的事情的更整洁的方式:

Filter(function(x) is.data.frame(get(x)), ls())
于 2013-10-30T14:27:45.063 回答
4

你需要get,试试这个:

x <- sapply(sapply(ls(), get), is.data.frame)
names(x)[(x==TRUE)] 
于 2013-10-30T14:20:24.330 回答
3

我使用lsos()基于这个问题的修改功能

library(devtools)
source_url("https://raw.github.com/rsaporta/pubR/gitbranch/memoryFunctions.R")

## only show data.frames of at least ~1KB
lsos(t="data.frame")

## show data.frames of any size
lsos(t="data.frame", b=1)

### OUTPUT

           KB       Type Rows Columns
anotherDF   5 data.frame   50       4
df        0.8 data.frame    5       2
于 2013-10-30T17:17:30.753 回答