for 循环中的 as.Date 意外执行

Hug*_*ugh 1 for-loop r coercion

为什么as.Date在 for 循环中使用这种(诚然是非正统的)会产生意想不到的结果?

我有以下日期向量:

df.1 <- c("30-Sep-12", "30-Nov-12", "30-Sep-12", 
  "30-Nov-12", "30-Sep-12", "30-Nov-12", 
  "30-Sep-12")
Run Code Online (Sandbox Code Playgroud)

现在当然要以标准日期格式获取它们,我可以使用

df.date <- as.Date(df.1, format="%d-%b-%y")
Run Code Online (Sandbox Code Playgroud)

但在我的脚本的上下文中,我想使用循环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
Run Code Online (Sandbox Code Playgroud)

mne*_*nel 5

单个原子向量只能属于单个类

当您用于[<-替换 的单个值时df.forR无法将那些未更改的值保存为看起来像日期的“字符”变量,以及日期类值(像字符一样格式化和显示的数字)。因此它强制性格。

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")
}
Run Code Online (Sandbox Code Playgroud)

或者通过在循环结束时将结果强制回日期(通过数字)

例如

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')
Run Code Online (Sandbox Code Playgroud)