В R я хотел бы получить список глобальных переменных в конце моего скрипта и перебрать их. Вот мой код
#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'
}
Моя проблема в том, что typeof(i)
всегда возвращается, character
даже если переменная, a
а c
не символьные переменные. Как я могу получить исходный тип переменной внутри цикла for?
typeof()
дает очень общую информацию о том, как объект хранится в памяти. Для большинства случаев использования, если вы хотите узнать полезную информацию о переменнойx
, вы получите более полезную информациюclass(x)
,is(x)
илиstr(x)
(в порядке , насколько подробно они предоставляют). См . Ответ Эрика ниже, где приведены примеры того, чтоtypeof()
вам говорит: факторы естьinteger
; списки, фреймы данных, объекты модели, другие расширенные объекты - это простоlist
...Ответы:
Вам нужно использовать
get
для получения значения, а не символьного имени объекта, возвращаемогоls
:В качестве альтернативы, для представленной проблемы вы можете использовать
eapply
:источник
get
есть свои критики, и я полагаю,eapply
это будет быстрее, чем интерпретируемый цикл. Но есть только один способ узнать ...Как получить тип переменной, скрытой под глобальным объектом:
Все, что вам нужно, есть в руководстве R по основным типам: https://cran.r-project.org/doc/manuals/R-lang.html#Basic-types
Вам
object()
нужно проникнуться,get(...)
прежде чем вы сможете заглянуть внутрь. Пример:Как получить тип переменной в R
Например, функция
typeof
R имеет смещение, чтобы дать вам тип на максимальной глубине.Как получить класс переменной в R
R функция
class
имеет уклон , чтобы дать вам тип контейнер или структуры герметизирующей вашим типов, например.Получите данные
storage.mode
вашей переменнойКогда переменная R записывается на диск, структура данных снова меняется и называется данными
storage.mode
. Функцияstorage.mode(...)
показывает эту информацию низкого уровня: см режим, класс и тип объектов R . Вам не нужно беспокоиться о режиме storage.mode в R, если только вы не пытаетесь понять задержки, вызванные приведениями / принуждениями туда и обратно, которые происходят при назначении и чтении данных на диск и с диска.Идеология системы типизации триад R:
В системе набора текста R утиный текст есть неопределенность. В качестве аналогии рассмотрим керамическую чашку, ее можно использовать для хранения жидкости или использовать в качестве снаряда, как бейсбольный мяч. Назначение чашки зависит от ее доступных свойств и выполняемой функции. Такая гибкость типов дает программистам большую свободу действий при перенаправлении любого вида вывода из одной функции в другую, и R пойдет на все, чтобы попытаться прочитать ваши мысли и сделать что-то разумное.
Идея состоит в том, что когда начинающие программисты пишут программы на R с помощью броуновского движения, они пытаются передать a
googah.blimflarg
вvehicle.subspaceresponder(...)
. Вместо того, чтобы выдавать ошибку типа, программа R выполняет гимнастику, чтобы преобразовать тип, а затем делает что-то удивительно полезное. Новичок-программист публикует код в своем блоге и говорит: «Посмотрите на эту потрясающую вещь, которую я сделал с 3 строками кода R! Я понятия не имею, откуда он знает, что делать, но он знает!»источник
Вы можете использовать class (x) для проверки типа переменной. Если требуется проверить все типы переменных кадра данных, можно использовать sapply (x, class).
источник
Я пытаюсь
class
и работаюtypeof
, но ничего не получается.источник
Вот одна из моих игрушек из набора инструментов, созданная для того, чтобы делать противоположное тому, что вы хотели:
источник
lapply (your_dataframe, class) дает что-то вроде:
$ tikr [1] "фактор"
$ Date [1] "Дата"
$ Open [1] "числовой"
$ High [1] "числовой"
... и т.д.
источник