2013-07-10 138 views
0

爲什麼在for循環中使用as.Date會產生意外的結果?(無可否認,這是非正統的)。as for in循環意外執行

我有以下最新矢量:

df.1 <- c("30-Sep-12", "30-Nov-12", "30-Sep-12", 
    "30-Nov-12", "30-Sep-12", "30-Nov-12", 
    "30-Sep-12") 

當然,現在讓他們在標準日期格式,我可以使用

df.date <- as.Date(df.1, format="%d-%b-%y") 

但我想我的腳本的上下文使用for循環:

as.Date(df.1[6], format="%d-%b-%y") # "30-Sep-12" 
# [1] 2012-11-30 # as expected 

df.for <- df.1 
for (i in seq_along(df.1)){ 
df.for[i] <- as.Date(df.1[i], format="%d-%b-%y") 
} 
df.for[6] 
# [1] 15674 # unexpected 

回答

4

單個原子向量只能是單個類

當您使用[<-更換的df.for單個值,R也擋不住那些你沒有改變爲「字符」的變量,看起來像日期和Date類值(這是格式化和顯示的數值像一個角色)。所以它強制性格。

你能解決這個問題通過使df.for一個list

df.for <- as.list(df.1) 
for (i in seq_along(df.1)){ 
    df.for[[i]] <- as.Date(df.1[i], format="%d-%b-%y") 
} 

或者通過在循環結束(通過數字)

如強迫的結果回日期

df.for <- df.1 
for (i in seq_along(df.1)){ 
    df.for[i] <- as.Date(df.1[i], format="%d-%b-%y") 
} 

as.Date(as.numeric(df.for),origin = '1970-01-01')