2013-01-24 80 views
1

我已經取了一組從PostgreSQL的日期,他們看起來是正確的:日期顯示爲數字

[1] "2007-07-13" "2007-07-14" "2007-07-22" "2007-07-23" "2007-07-24" 
[6] "2007-07-25" "2007-08-13" "2007-08-14" "2007-08-15" "2007-08-16" 
etc. 

然後我想對它們運行一個循環,使新的SQL語句來獲取一些其他數據集(是的,我知道我在做什麼,這將是不可能做到所有的處理在數據庫服務器)

所以,我想

for(date in geilodates) 
mapdate(date,geilo) 
Error in postgresqlExecStatement(conn, statement, ...) : 
    RS-DBI driver: (could not Retrieve the result : ERROR: invalid input syntax for type date: "13707" 
LINE 1: ...id_date_location where not cowid is null and date='13707' or... 

mapdate是我寫的一個功能,使用與...一起在是

sql=paste('select * from gps_coord where cowid=',cowid," and date='",date,"'",sep='') 

所以,現在的情況是是R默默將我格式化日期以他們的整數表示之前,我試圖把SQL粘貼在一起。

如何獲取日期的原始文本表示?我試圖

for(date in geilodates){ 
    d=as.Date(date,origin="1970-01-01") 
    mapdate(d,geilo) 
} 
Error in charToDate(x) : 
character string is not in a standard unambiguous format 

而且我還沒有設法找到任何其他函數來創建一個datestring(或「服務」的日期字符串列表變量

+0

你可以同時顯示'dput(geilodates)'和完整的'mapdate'功能嗎? –

+0

相關:http://stackoverflow.com/questions/6434663/r-why-does-looping-over-a-date-object-result-in-a-numeric-iterator –

回答

2

當我嘗試?format.Date

x <- Sys.Date() 
class(x) 
class(format(x)) 

在R,Date類的數據是數值類型。 表示Date作爲字符串是調用format的正式方法。

我懷疑date的格式是在你的情況下定義的,所以paste 會做一些意想不到的事情。

也許您需要將format(x, "%Y-%m-%d")放在您的paste函數中,而不是date,以告知R您如何選擇Date的格式。

+0

謝謝,看起來像我所需要的,但這是奇怪的,我可以這樣做: 日期= geilodates [1] >日期 [1] 「2007-07-13」 >類(日期) [1] 「日期」 > d = format.Date (date,origin =「1970-01-01」) > d [1]「2007-07-13」 > class(d) [1]「character」 這看起來不錯,但如果我把它進入for循環: for(date in geilodates){ + d = format.Date(date,origin =「1970-01-01」) +} as.POSIXlt中的錯誤。數字(x):必須提供'origin' – MortenSickel

+0

(該評論發佈於未經編輯的答案) – MortenSickel

+0

@MortenSickel,也許您需要跟蹤涉及變量的類。 – wush978

0

感謝wush978指着我在正確的方向,最後,我不得不這樣做:

for(d in geilodates){ 
date=format(as.Date(d,origin="1970-01-01")) 
mapdate(date,geilo) 
} 

出於某種原因,循環中的「日期」變量被視爲一個整數裏面,所以我明確必須將其轉換爲日期,然後格式化它...

+1

「......出於某種原因」是因爲'is.vector(Sys.Date())'爲'FALSE'。 'help('for')'說:「seq:表達式評估爲一個向量......或一個pairlist或'NULL'」,所以會發生什麼(基本上)'as.vector(Sys.Date()) #15729'。 –

+0

謝謝,@JoshuaUlrich!這明確了它。 (只是希望我記得,直到下一次我需要它;-)) – MortenSickel