Liste os nomes dos dataframes no ambiente global [duplicado]

Sep 03 2020

Estou tentando escrever uma função que lista os nomes de dataframes em meu ambiente global.

Posso fazer isso usando o código:

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

Preciso converter isso em uma função que possa facilmente chamar.

Respostas

4 Bas Sep 03 2020 at 12:32

Você deve estar ciente de que, ls()por padrão, lista os objetos no ambiente atual . Se você envolver seu código em uma função, este ambiente atual é o ambiente de função interna , que está vazio naquele ponto (estamos na primeira linha da função e nada foi definido ainda). Já que você está interessado no ambiente global, você deve especificar isso explicitamente com .GlobalEnv:

lsf <- function() {
  l<-ls(.GlobalEnv)
  l[sapply(l, function(x) is.data.frame(get(x, envir = .GlobalEnv)))]
}

lsf()
2 ThomasIsCoding Sep 03 2020 at 12:38

Talvez você possa tentar o código abaixo

list.df <- function() names(Filter(is.data.frame,mget(ls())))
2 BenjaminChristoffersen Sep 03 2020 at 13:21

Você pode usar as.listem um ambiente e, em seguida, usar sapplycom is.whatevereste:

list_all_x <- function(is.x = is.data.frame, env = .GlobalEnv){
  env <- as.list(env)
  names(env)[sapply(env, is.x)]
}

# or related to ThomasIsCoding's great answer
list_all_x <- function(is.x = is.data.frame, env = .GlobalEnv)
   names(Filter(is.x, as.list(env)))

# check the function
d1 <- numeric()
d2 <- data.frame()
d3 <- data.frame()
  
list_all_x()
#R> [1] "d2" "d3"
list_all_x(is.x = is.numeric)
#R> [1] "d1"

Você pode usar o acima se quiser aplicar a função a outro ambiente usando o envargumento ou procurar outro tipo alterando o is.xargumento como mostrado acima.