2015-09-11 4 views
1

Я пишу сценарий R (а не функцию, просто набор команд), который будет считывать файл csv в фрейм данных. Файл CSV большой, и я не хочу его читать каждый раз, когда я запускаю скрипт, если он уже был прочитан. Это, как я проверяю, если переменная существует:Прочтите файл, если он еще не прочитан в R

if (!exists("df")) { 
    df <- read_csv(file = "./some_file.csv") 
} 

Однако каждый раз, когда я запустить скрипт, независимо от того, существует ли df или нет, функция read_csv работает.

Что мне здесь не хватает? Должен ли я указывать, где необходимо искать кадр данных df?

Редактировать: Здесь немного контекста к тому, чего я пытаюсь достичь. Обычно при работе я работаю интерактивно в R или Rstudio. Если я готовлю файл, я его читаю, а затем данные находятся в GlobalEnvinronment, и я играю с моими данными. Я пытался поместить всю свою работу в скрипт и добавить к ней шаг за шагом. В начале скрипта я прочитал этот CSV-файл, который составляет около 11 МБ, а затем начал манипулировать данными. Однако, когда я добавляю новые строки в свой скрипт, и я хочу их протестировать, я не хочу снова читать CSV-файл. Он уже прочитан, и кадр данных доступен в глобальной среде. Именно по этой причине я поставил вызов функции read_csv() внутри оператора if.

Проблема, несмотря на переменную, существующую в глобальной среде, каждый раз, когда я запускаю скрипт, запускается функция read_csv(), как если бы оператор if игнорировался.

+0

Является ли ДФ вашего реального имени переменного? – Heroka

+0

Можете ли вы показать немного больше того, что вы делаете? – Heroka

+0

Странно - он работает для меня точно так же, как вы его используете. Вы решили эту проблему? – Murray

ответ

0

df фактически является функция в stats пакете, который обычно существует :-)

Так в основном, просто выбрать лучшее имя переменного!

+2

Это была моя первая мысль. Но разве это не означает, что он всегда существует, поэтому файл никогда не читается? – Heroka

+0

Ха, на самом деле хороший момент, упустил! впереди ... Hm ... – drmariod

+0

Моя переменная не является фактически именами df. Я просто использовал df как сокращение для фрейма данных. И не так ли, что пространства имен переменных и функций отличаются друг от друга, поэтому вы можете одновременно иметь функцию c и переменную c c all? – Hooman

0

Можете ли вы использовать аргумент «где» и «окружающая среда», а затем попробуйте. Эти аргументы в основном приводят команду exist для просмотра этой переменной в каком месте/среде.

exists(x, where = -1, envir = , frame, mode = "any", 
    inherits = TRUE) 

Здесь х имя переменного

+0

Я пробовал это, но все же моя намеченная цель не происходит. Дело в том, что я впервые запускаю свой скрипт и проверяю значение 'exists (" df ")', он возвращает TRUE. – Hooman

+0

Разве это не ожидаемое поведение? – Heroka

+0

Heroka, это именно то, чего я не понимаю. Это действительно ожидаемое поведение. Однако, если существует ("df") возвращает TRUE, тогда утверждение внутри if не должно запускаться. Но он работает независимо. – Hooman

Смежные вопросы