2013-07-01 37 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

相關問題