2013-07-01 38 views
1

我有代码看起来像这样:基于另一个变量类型的R中的类型转换?

if(inherits(index(x),"POSIXct"))index_d=as.POSIXct(rownames(d)) 
else if(inherits(index(x),"Date"))index_d=as.Date(rownames(d)) 
else stop(paste0("x uses a date index (",attr(x,".indexCLASS"),") we are not expecting...")) 

x是XTS的对象,但我希望有一个通用的解决方案。然而东西,仅仅用XTS对象的作品,将是这个特殊的代码足够好!)

iee我所寻找的是像一些神奇的命令:

index_d = as.same.type.as(index(x),rownames(d)) 

顺便说一句,我也有这个颇为相似代码:

if(inherits(index(x),"POSIXct"))rownames(d)=as.character(dates,format="%Y-%m-%d %H:%M:%S") 
else rownames(d)=dates #Rely on implicit conversion from Date to character 

我怀疑这是鱼的不同水壶,也“强硬”;只是觉得我会提到它的情况下,R确实有一些不可思议的方式来做到这一点。 (我必须使用明确的format用于POSIXct,因为隐式转换将采用“2012-06-21 00:00:00”并将其写为“2012-06-21”而不是“2012-06-21 00:00 :00" )

回答

2

我认为你可以做到你所谈论的与内置as()功能是什么:

as.same.type.as <- function(instance_of_target_class, object_to_convert) { 
    return(as(object_to_convert, 
    class(instance_of_target_class))) 
    } 
+0

感谢 - 这正是功能我希望我会找到的类型。但看起来'as(x,'Date')'不会做'as.Date('x')',而是用_no方法或强制“字符”为“日期”的默认方式_ 其他人发现相同问题在这里,但没有给出解决方案: https://stat.ethz.ch/pipermail/r-help/2010-February/229371.html 我想这可能是不可能的? –

+0

P.S. as(x,'Date',strict = F)'也失败。 –

+1

对,所以可以使用命令'showMethods(coerce)'或者特别是'canCoerce(x,cl)'来检查一些内建胁迫方法。在你的情况下,你想要的强制不是内置的,所以你需要制作一个自定义的日期类,它继承自当前的日期类,并且还提供了自定义强制方法。 'as'函数只是调用类中定义的任何强制方法 – qwwqwwq

相关问题