2015-09-11 72 views
1

我正在寫一個R腳本(不是函數,只是一個命令集合),它將讀取一個csv文件到數據框中。 CSV文件很大,如果它已經被讀取,我不想每次運行腳本時都讀取它。這是怎麼了檢查,如果該變量存在:讀取一個文件,如果它之前沒有讀過R

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

不過,我每次運行腳本無論df是否存在時,read_csv函數運行。

我在這裏錯過了什麼?我應該指定應該在哪裏搜索數據幀df

編輯:這是我想要實現的一些背景。通常,在工作時我在R或Rstudio中交互工作。如果我正在準備一個文件,我讀了它,然後數據在GlobalEnvinronment中,然後我使用我的數據。我試圖把所有的工作都放在一個腳本中,然後逐步添加到腳本中。在腳本的開頭,我讀取了大約11MB的CSV文件,然後開始處理數據。但是,當我在腳本中添加新行並且想要測試它們時,我不想再讀取CSV文件。它已被讀取並且數據框在Global環境中可用。這就是我在if語句中調用read_csv()函數的原因。

儘管全局環境中存在變量,但每次運行腳本時,都會運行read_csv()函數,就好像忽略if語句一樣。

+0

是在DF你的真實變量名? – Heroka

+0

你可以多展示一下你在做什麼? – Heroka

+0

這很奇怪 - 它對我來說就像你使用它一樣。你解決了這個問題嗎? – Murray

回答

0

df實際上是在stats包通常存在的功能:-)

因此,基本上,只是選擇一個更好的變量名!

+2

這也是我的第一個想法。但是這不代表它總是存在,所以文件永遠不會被讀取? – Heroka

+0

哈,其實很好,忽略了!在前面......嗯...... – drmariod

+0

我的變量實際上並不是名稱df。我只是使用df作爲數據框的簡寫。難道不是變量和函數名稱空間互不相同,所以你可以同時擁有一個名爲c的函數和一個名爲c all的變量? – Hooman

0

您可以使用「where」和「environment」參數然後嘗試。這些觀點基本上驅使存在命令在什麼地點/環境中查看這個變量。

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

x是變量名

+0

我試過了,但我的預期目標還沒有發生。事情是在我第一次運行我的腳本之後,我檢查了exists(「df」)的值,它返回TRUE。 – Hooman

+0

這不是預期的行爲? – Heroka

+0

Heroka,這正是我不明白的。這確實是預期的行爲。但是,如果exists(「df」)返回TRUE,那麼if中的語句不應運行。但它無論如何運行。 – Hooman