我一直在使用我的Window 7 RStudio環境(R版本3.2.3)中的腳本,並且我看到在命令行上看到的行爲與運行相同命令的行爲之間看起來有什麼區別從一個腳本內。下面是我在運行腳本的簡化版本:爲什麼這些R命令在腳本和命令行中表現不同?
if(!require(lubridate)) { install.packages("lubridate"); require(lubridate) }
startDate <- "2015-12-21"
endDate <- "2016-01-03"
rDateStrangeness <- function(startDate = "2015-12-21",
endDate = "2016-01-03") {
sdate <- as.Date(startDate)
edate <- as.Date(endDate)
intervalDays <- seq(sdate, edate, by="days")
for(day in intervalDays) {
cat("day = ", day, ", as.character.Date(day) = ",
as.character.Date(day) , ", wday(day) = ", wday(day), "\n")
}
}
當我源代碼並運行rDateStrangeness(),我得到這樣的輸出:
day = 16790 , as.character.Date(day) = 16790 , wday(day) = 16790
day = 16791 , as.character.Date(day) = 16791 , wday(day) = 16791
day = 16792 , as.character.Date(day) = 16792 , wday(day) = 16792
day = 16793 , as.character.Date(day) = 16793 , wday(day) = 16793
day = 16794 , as.character.Date(day) = 16794 , wday(day) = 16794
day = 16795 , as.character.Date(day) = 16795 , wday(day) = 16795
day = 16796 , as.character.Date(day) = 16796 , wday(day) = 16796
day = 16797 , as.character.Date(day) = 16797 , wday(day) = 16797
day = 16798 , as.character.Date(day) = 16798 , wday(day) = 16798
day = 16799 , as.character.Date(day) = 16799 , wday(day) = 16799
day = 16800 , as.character.Date(day) = 16800 , wday(day) = 16800
day = 16801 , as.character.Date(day) = 16801 , wday(day) = 16801
day = 16802 , as.character.Date(day) = 16802 , wday(day) = 16802
day = 16803 , as.character.Date(day) = 16803 , wday(day) = 16803
但是,當我從命令運行相同的命令線
> sdate <- as.Date(startDate)
> edate <- as.Date(endDate)
> intervalDays <- seq(sdate, edate, by="days")
> day <- intervalDays[1]
> day.aschar <- as.character.Date(day)
我看到這個輸出
> day.aschar
[1] "2015-12-21"
> class(day.aschar)
[1] "character"
> wday(day.aschar)
[1] 2
我期待着我在命令行上看到的行爲,但它看起來像循環訪問日期序列的方式與我所期望的不同。我想在循環中運行星期一,但它無法處理循環如何編入日期序列。
爲什麼我在命令行和腳本之間看到這些差異,我該如何解決這個問題?
根據我最初的要求,完美的答案。我沒有提到的一件事是,我希望一天成爲循環內發生額外處理的日期。我最終使用我發佈的鏈接中描述的seq_along解決方案。 –