0

次のコードがあります。

    tradingDates <- c(as.Date("1996-12-31", format = "%Y-%m-%d" ), 
                      as.Date("1997-12-31", format = "%Y-%m-%d" ))
    d1 <- data.frame(CUSIP=c("039229109","M33228109"),
             Port.Weights=as.numeric(c("3.571429","4.976429")), 
             Trade.Date = as.Date("1996-12-31", format = "%Y-%m-%d" ), stringsAsFactors = FALSE)
    d2 <- data.frame(CUSIP=c("432764733","324K32586"),
             Port.Weights=as.numeric(c("6.243803","1.469823")), 
             Trade.Date = as.Date("1997-12-31", format = "%Y-%m-%d" ), stringsAsFactors = FALSE)
    myList <- list(d1, d2)

    thePorts <- lapply(seq_along(myList), function(x)
                       rbind(myList[[x]],
                             c("78462F10", 
                               sum(as.numeric((-.01)*myList[[x]]$Port.Weights[1])), 
                               as.Date(as.character(tradingDates[x]), format= "%Y-%m-%d")),
                             c("CASH_USD",
                               sum(as.numeric((.01)*myList[[x]]$Port.Weights[1])),
                               as.Date(as.character(tradingDates[x]), format= "%Y-%m-%d"))))

私が得ているエラーは次のとおりです。

     Error in charToDate(x) : character string is not in a standard unambiguous format 

この日付をフォーマットするために考えられるすべての方法を試しましたが、rbind と lapply 以外では、この行は正常に機能することに注意してください。

    x=5
    format(as.Date(as.character(tradeDates[x]), format= "%Y-%m-%d"), "%Y%m%d")
4

1 に答える 1

1

問題は、c()混合データでの使用です。種類。c()(パッケージによってオーバーロードされていない限り) 同じタイプの要素を結合するためだけに使用されるため、すべてが同じ data.type に強制されます。あなたが実行する場合

lapply(seq_along(myList), function(x)
    c("78462F10", 
    sum(as.numeric((-.01)*myList[[x]]$Port.Weights[1])), 
    as.Date(as.character(tradingDates[x]), format= "%Y-%m-%d")))

# [[1]]
# [1] "78462F10"    "-0.03571429" "9861"       
# 
# [[2]]
# [1] "78462F10"    "-0.06243803" "10226"  

すべてが文字列に変換されていることがわかります。これには、最初に数値に変換された日付が含まれ、ここでは 1970 年 1 月 1 日からの日数で表されます。単純なベクトルは 1 つの型のデータしか保持できませんが、alist()はさまざまな型のデータを保持できます。コードを次のように変更します

thePorts <- lapply(seq_along(myList), function(x)
    rbind(myList[[x]],
        list("78462F10", 
            sum(as.numeric((-.01)*myList[[x]]$Port.Weights[1])), 
            as.Date(as.character(tradingDates[x]), format= "%Y-%m-%d")),
        list("CASH_USD",
            sum(as.numeric((.01)*myList[[x]]$Port.Weights[1])),
            as.Date(as.character(tradingDates[x]), format= "%Y-%m-%d"))
    )
)

これは戻ります

[[1]]
      CUSIP Port.Weights Trade.Date
1 039229109   3.57142900 1996-12-31
2 M33228109   4.97642900 1996-12-31
3  78462F10  -0.03571429 1996-12-31
4  CASH_USD   0.03571429 1996-12-31

[[2]]
      CUSIP Port.Weights Trade.Date
1 432764733   6.24380300 1997-12-31
2 324K32586   1.46982300 1997-12-31
3  78462F10  -0.06243803 1997-12-31
4  CASH_USD   0.06243803 1997-12-31

希望通り(だと思います)

于 2014-07-24T18:11:47.050 に答える