【发布时间】:2015-03-10 18:59:56
【问题描述】:
我将一些数据从 SQLite 数据库提取到 R 中的数据框中。其中一个字段是日期字段,一旦拉入 R(使用 sqldf 包),它就会显示为字符字段:
dat$dt : chr "2014-10-07" "2014-10-07" "2014-10-07" "2014-10-07" ...
我需要将其转换回日期。 在 Rstudio 中将此列转换为日期可以正常工作,但当我将文件称为 Rscript 时则不行。
日期转换调用:
dat$as_date <- as.Date(dat$run_date)
Shell 调用 (Mac OSX):
Rscript my_file.R 'my_thing'
来自 Rstudio 的电话:
system(paste("Rscript my_file.R, 'my_thing'"))
错误消息(与 Rstudio 中的 shell 或 Rscript 调用相同):
Error in as.Date.numeric(dat$dt) :
'origin' must be supplied
Calls: as.Date -> as.Date.numeric
Execution halted
我尝试提供具有相同结果的来源和格式:
dat$as_date <- as.Date(dat$dt, format = '%Y-%m-%d')
dat$as_date <- as.Date(dat$dt, origin="1970-01-01")
为什么 as.Date() 转换可以在 IDE 中工作,但不能作为 Rscript 调用,如何解决?
编辑:
到目前为止,感谢您的输入,以下是脚本的相关部分(整个内容约为 1000 行)。它从文件顶部开始,直到调用 as.Date() 停止执行失败:
我的文件.R:
#!/usr/bin/R
suppressMessages(require(sqldf))
suppressMessages(require(dplyr))
suppressMessages(require(reshape2))
args <- commandArgs(TRUE)
THING <- args[1]
sq <- dbConnect(SQLite(), dbname="db2.sqlite3")
dat <- dbGetQuery(conn = sq, sprintf('select * from db_table where db_thing=%s', paste(shQuote(THING),collapse=",")))
dat <- filter(dat, !grepl('exclude', comment))
dat$the_date <- as.Date(dat$dt)
我还编辑了 Rscript 调用,因为我确实包含了 args。
这是数据结构;我看不到任何因素。
'data.frame': 128 obs. of 2 variables:
$ dt: chr "2014-10-07" "2014-10-07" "2014-10-07" "2014-10-07" ...
$ comment : chr "" "" "" "" ...
日期字段在 R 之外的行为确实符合预期(例如,使用 SQL 和 python)。
【问题讨论】:
-
发布整个脚本。您没有提供足够的信息来诊断问题。
as.Date函数是泛型的,数字和字符方法有不同的参数。
标签: r date type-conversion