2013-01-15 49 views
4

我正在學習一個教程,並且在語法上有一段艱難的時間。我看不到我要出錯的地方,但我從控制檯收到錯誤消息。R-Project if else syntax

我有一個目錄中的300 csv文件的列表。用戶將輸入他們正在搜索的文件的編號(id)。格式如下所示:001.csv,002.csv,090.csv 250.csv等

該函數將輸入轉換爲一個字符串,即csv文件名。例如如果id是5,則返回005.csv。如果輸入220,輸出220.csv。

下面是代碼:

csvfile <- function(id) { 
    if (id < 10) { paste0(0,0,id,".csv" 
    } else if (id < 100) {paste0(0,id,".csv" 
    }else paste0(id,".csv") 
} 

這裏是控制檯將返回錯誤:

> csvfile <- function(id) { 
+ if (id < 10) { paste0(0,0,id,".csv" 
+ } else if (id < 100) {paste0(0,id,".csv" 
Error: unexpected '}' in: 
"if (id < 10) { paste0(0,0,id,".csv" 
}" 
> }else paste0(id,".csv") 
Error: unexpected '}' in "}" 
> } 

我可以看到R不喜歡我的一些「}」,但想不通爲什麼?我的語法有什麼問題?

+5

已經有一個函數很好地完成了你的函數的目標:'sprintf(「%03d.csv」,id)'。例如。如果你給它'id = 14',它會返回'「014.csv」'。 – Backlin

+1

@Backlin但是這裏的OP正在通過一個教程...也許他需要更多的幫助來解決如何糾正語法錯誤。 – agstudy

+0

是的,這就是爲什麼我評論,而不是回答。就像要提到的那樣,R中有很多小功能需要照顧(請原諒我選擇的詞語)這樣的微不足道的任務。作爲初學者,我寫了很多我自己定製的小函數,但是隨着我進步和發現了我做過的事情的「正確」方式,我丟棄了大部分函數。 – Backlin

回答

16

你缺少一些)人物在那裏,前兩個paste0電話:

csvfile <- function(id) { 
    if (id < 10) { 
     paste0(0,0,id,".csv") 
    } else if (id < 100) { 
     paste0(0,id,".csv") 
    } else paste0(id,".csv") 
} 
+0

謝謝!我不敢相信我忽略了這一點。 –

7

R中的語法錯誤都是開頭難找到。 控制檯很適合測試一行代碼,但當您嘗試編寫較長的語句時,它並不是非常有用。

我的建議是使用IDE來幫助您編寫函數。爲什麼不嘗試RStudio例如?

+0

我會檢查出來,歡呼 –