Liste os nomes dos dataframes no ambiente global [duplicado]
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
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()
Talvez você possa tentar o código abaixo
list.df <- function() names(Filter(is.data.frame,mget(ls())))
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.