首页 文章

如何在Azure ML中为strptime函数定义当前时区,未知时区'localtime'

提问于
浏览
7

我在Azure机器学习中的Execute R模块中操作的所有这些日期在输出中写为空白 - 也就是说,这些日期列存在,但这些列中没有值 .

包含我正在读入数据框的日期信息的源变量有两种不同的日期格式 . 它们如下:

usage$Date1=c(‘8/6/2015’   ‘8/20/2015’  ‘7/9/2015’)
usage$Date2=c(‘4/16/2015 0:00’,  ‘7/1/2015 0:00’, ‘7/1/2015 0:00’)

我在AML中检查了日志文件,而AML找不到本地时区 . 日志文件警告具体:[ModuleOutput] 1:在strptime(x,format,tz = tz):[ModuleOutput]无法识别当前时区'C':[ModuleOutput]请设置环境变量'TZ'[ModuleOutput] [ModuleOutput ] 2:在strptime(x,format,tz = tz):未知时区'localtime'

我在这里提到了另一个关于为strptime设置默认时区的答案

unknown timezone name in R strptime/as.POSIXct

我更改了代码以显式定义全局环境时间变量 .

Sys.setenv(TZ='GMT')


####Data frame usage cleanup, format and labeling
usage<-as.data.frame(usage)
usage$Date1<-as.character(usage$Date1)
usage$Date1<-as.POSIXct(usage$Date1, "%m/%d/%Y",tz="GMT")
usage$Date1<-format(usage$Date1, "%m/%d/%Y")
usage$Date1<-as.Date(usage$Date1, "%m/%d/%Y")
usage<-as.data.frame(usage)

usage$Date2<- as.POSIXct(usage$Date2, "%m/%d/%Y",tz="GMT")
usage$Date2<- format(usage$Date2,"%m/%d/%Y")
usage$Date2<-as.Date(usage$Date2, "%m/%d/%Y")
usage<-as.data.frame(usage)

问题仍然存在 - 因此AzureML不会将这些变量写出来,而是将这些列写为空白 .
(此代码适用于R studio,我假设本地时间来自系统 . )

在阅读关于此问题的两篇博客文章后,似乎Azure ML不支持某些日期时间格式:

http://blogs.msdn.com/b/andreasderuiter/archive/2015/02/03/troubleshooting-error-1000-rpackage-library-exception-failed-to-convert-robject-to-dataset-when-running-r-scripts-in-azure-ml.aspx

http://www.mikelanzetta.com/2015/01/data-cleaning-with-azureml-and-r-dates/

所以我尝试在将它发送到输出流之前转换为POSIXct,我已经完成如下:tenantusage $ Date1 = as.POSIXct(tenantusage $ Date1,“%m /%d /%Y”,tz =“EST5EDT “); tenantusage $ Date2 = as.POSIXct(tenantusage $ Date2,“%m /%d /%Y”,tz =“EST5EDT”);

但遇到同样的问题 . 这些变量中的信息拒绝写出输出 . Date1和Date2列为空 .

请指教!

谢谢

1 回答

  • 0

    您好SingingData和SochiX,

    很抱歉听到这个沮丧的来源!我发现SingingData的代码示例的以下变体适用于我(在CRAN 3.1.0模块中测试):

    usage <- data.frame(list(Date1 = c('8/6/2015',   '8/20/2015',  '7/9/2015'),
                             Date2 = c('4/16/2015 0:00',  '7/1/2015 0:00', '7/1/2015 0:00')))
    usage$Date1 <- as.POSIXlt(usage$Date1, "%m/%d/%Y",tz="GMT")
    usage$Date2 <- as.POSIXlt(usage$Date2, "%m/%d/%Y",tz="GMT")
    
    usage$Date1 <- format(usage$Date1, "%m/%d/%Y")
    usage$Date2 <- format(usage$Date2,"%m/%d/%Y")
    
    usage$Date1 <- as.Date(usage$Date1, "%m/%d/%Y")
    usage$Date2 <- as.Date(usage$Date2, "%m/%d/%Y")
    
    maml.mapOutputPort("usage");
    

    我使用了 as.POSIXlt() 而不是 as.POSIXct() . 我希望这有助于解锁你在R的工作 .

相关问题