Em R, gostaria de recuperar uma lista de variáveis globais no final do meu script e iterar sobre elas. Aqui está o meu código
#declare a few sample variables
a<-10
b<-"Hello world"
c<-data.frame()
#get all global variables in script and iterate over them
myGlobals<-objects()
for(i in myGlobals){
print(typeof(i)) #prints 'character'
}
Meu problema é que typeof(i)
sempre retorna character
mesmo sendo variável a
e c
não são variáveis de caráter. Como posso obter o tipo original de variável dentro do loop for?
typeof()
fornece uma informação muito genérica sobre como o objeto é armazenado na memória. Para a maioria dos casos de uso, se você quer saber boas informações sobre uma variávelx
, você poderá obter mais informações úteis a partir declass(x)
,is(x)
oustr(x)
(em ordem de quanto detalhe que eles fornecem). Veja a resposta de Eric abaixo para exemplos do quetypeof()
diz a você: fatores sãointeger
; listas, quadros de dados, objetos de modelo, outros objetos avançados são apenaslist
...Respostas:
Você precisa usar
get
para obter o valor em vez do nome do caractere do objeto, conforme retornado porls
:Como alternativa, para o problema apresentado, você pode usar
eapply
:fonte
get
tem seus críticos e imaginoeapply
que seja mais rápido do que um loop interpretado. Mas só há uma maneira de descobrir ...Como obter o tipo de variável quando oculta sob um objeto global:
Tudo que você precisa está no manual R sobre tipos básicos: https://cran.r-project.org/doc/manuals/R-lang.html#Basic-types
Você
object()
precisa ser penetradoget(...)
antes de poder ver o interior. Exemplo:Como obter o tipo de variável que você tem em R
A função
typeof
R tem uma tendência para fornecer o tipo na profundidade máxima, por exemplo.Como obter a classe de uma variável que você tem em R
A função
class
R tem uma tendência para fornecer o tipo de contêiner ou estrutura que encapsula seus tipos, por exemplo.Obtenha os dados
storage.mode
da sua variávelQuando uma variável R é gravada no disco, o layout dos dados muda mais uma vez e é chamado de dados
storage.mode
. A funçãostorage.mode(...)
revela esta informação de baixo nível: ver Mode, classe e tipo de objetos R . Você não precisa se preocupar com o modo de armazenamento de R, a menos que esteja tentando entender os atrasos causados por conversões / coerções de ida e volta que ocorrem ao atribuir e ler dados de e para o disco.Ideologia em torno do sistema de tipagem da tríade de R:
O sistema de digitação duck de R contém incerteza. Como analogia, considere um copo de cerâmica; ele pode ser usado para conter um líquido ou como um projétil, como uma bola de beisebol. A finalidade da xícara depende de suas propriedades disponíveis e da função que atua sobre ela. Essa fluidez de tipo permite maior margem de manobra para os programadores redirecionarem qualquer tipo de saída de uma função para outra, e R fará um grande esforço para tentar ler sua mente e fazer algo razoável.
A ideia é que, quando os programadores novatos escrevem programas R por meio do movimento browniano, como farão, eles tentam passar de a
googah.blimflarg
para avehicle.subspaceresponder(...)
. Em vez de vomitar um erro de tipo, o programa R faz ginástica para transformar o tipo e então faz algo surpreendentemente útil. O programador novato posta o código em seu blog e diz "olhe para essa coisa incrível que fiz com 3 linhas de código R! Não tenho ideia de como ele sabe o que fazer, mas sabe!"fonte
Você pode usar a classe (x) para verificar o tipo de variável. Se o requisito é verificar todos os tipos de variáveis de um quadro de dados, sapply (x, classe) pode ser usado.
fonte
Eu tento
class
etypeof
funciona, mas tudo falha.fonte
Projetado para fazer essencialmente o inverso do que você queria, aqui está um dos meus brinquedos do kit de ferramentas:
fonte
lapply (your_dataframe, class) oferece algo como:
$ tikr [1] "fator"
$ Date [1] "Data"
$ Open [1] "numérico"
$ Alto [1] "numérico"
... etc.
fonte