获取可用数据框列表

Tom*_*eif 6 r shiny

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

sapply(ls(), is.data.frame)
Run Code Online (Sandbox Code Playgroud)

但这失败了因为ls返回字符串的向量.我打算使用此列表作为Shiny app中动态选择的输入.

Jam*_*mes 13

您可以使用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"
Run Code Online (Sandbox Code Playgroud)

  • 这很好。但请注意最后一行,它只能在全局环境中正常工作,因为“eapply()”明确针对“.GlobalEnv”,而“ls()”则不是(在函数中无法正常工作)。可以做类似的事情:“names(Filter(isTRUE, eapply(.GlobalEnv, is.data.frame)))”,那么就不需要“ls()”或“unlist()”。 (3认同)

Mad*_*one 6

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

l <- ls()
l[sapply(l, function(x) is.data.frame(get(x)))]
Run Code Online (Sandbox Code Playgroud)

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


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

Filter(function(x) is.data.frame(get(x)), ls())
Run Code Online (Sandbox Code Playgroud)


Jil*_*ina 5

你需要get,试试这个:

x <- sapply(sapply(ls(), get), is.data.frame)
names(x)[(x==TRUE)] 
Run Code Online (Sandbox Code Playgroud)