I think I've sorted this out now.  Debugging an R program is certainly
quite a feat but I think I'm getting there.  It's worth it for the power
yielded.




On Sun, Sep 16, 2012 at 7:16 PM, Bit Rocker <bitracket...@gmail.com> wrote:

> Just found a typo elsewhere in the code which looks like it's the culprit.
>
> I'm not sure if the report below is still relevant.  Will advise if so.
>
>
> On Sun, Sep 16, 2012 at 6:59 PM, Bit Rocker <bitracket...@gmail.com>wrote:
>
>> Hey all,
>>
>> Virgin post to this list - hope I've got it right ;o)
>>
>> I've been learning R intensively the last two weeks and gone from newbie
>> status to *reasonably* comfortable with it.
>>
>> Here's an issue I just cannot solve however as it appears to be some kind
>> of bug in R itself.  But I won't claim that for sure.
>>
>> I have a function as follows:
>>
>>
>> FindHighRow <- function(searchVector, highColumnIndex, thisDate, nextDate)
>> {
>>   dateFilter <- GetDateRangeString(thisDate,nextDate)
>>   filtered <- searchVector[dateFilter]
>>   returnRow <- filtered[which.max(filtered[,highColumnIndex])]
>>   returnRow
>> }
>>
>>
>> Running the lines BY HAND works fine.  But as soon as I call it as a
>> function (passing in *exactly* the same values - and I have definitely
>> checked and double-checked), the second line (filtered <-
>> searchVector[dateFilter]) throws this error .
>>
>> Error in if (length(c(year, month, day, hour, min, sec)) == 6 && c(year,
>> :
>>
>>   missing value where TRUE/FALSE needed
>>
>> In addition: Warning messages:
>>
>> 1: In as_numeric(YYYY) : NAs introduced by coercion
>>
>> 2: In as_numeric(YYYY) : NAs introduced by coercion
>>
>>
>> Checking with debugger() reveals this
>>
>> > debugger()
>>
>> Message:  Error in if (length(c(year, month, day, hour, min, sec)) == 6
>> && c(year,  :
>>
>>   missing value where TRUE/FALSE needed
>>
>> Available environments had calls:
>>
>> 1: FindHighRow(dateTable, theTimeSeries, 2, 3)
>>
>> 2: #4: searchVector[dateFilter]
>>
>> 3: #4: `[.xts`(searchVector, dateFilter)
>>
>> 4: .parseISO8601(ii, .index(x)[1], .index(x)[nr], tz = tz)
>>
>> 5: as.POSIXlt(do.call(lastof, parse.side(intervals[2], intervals[1])))
>>
>> 6: do.call(lastof, parse.side(intervals[2], intervals[1]))
>>
>> 7: function (year = 1970, month = 12, day = 31, hour = 23, min = 59, sec
>> = 59, subsec = 0.99999, tz = "")
>>
>> {
>>
>>     if (!missing(sec) && sec%%1 != 0)
>>
>>         subsec <- 0
>>
>> I then came across this post
>>
>>
>> http://r-forge.r-project.org/tracker/index.php?func=detail&aid=2116&group_id=118&atid=516
>>
>> While running demo/macd.R in the quantstrat package with --vanilla, I got
>> the following error:
>>
>> Error in if (length(c(year, month, day, hour, min, sec)) == 6 && c(year,
>> :
>> missing value where TRUE/FALSE needed
>>
>> It appears that this error is generated by .parse8061(), because there is
>> no TZ defined. Although there is a test for TZ=='' in the .parse8061()
>> function, that does not seem to work .... (didn't look any deeper, sorry
>> ;-) )
>>
>> Setting TZ to eg. "UTC" fixes the problem.
>>
>> I've tried setting TZ (timezone) to both "UTC" and "GMT"
>>
>> > Sys.getenv("TZ")
>>
>> [1] ""
>>
>> > Sys.setenv(TZ='UTC')
>>
>> > Sys.getenv("TZ")
>>
>> [1] "UTC"
>>
>> > Sys.getenv("TZ") %in% c("", "GMT", "UTC")
>>
>> [1] TRUE
>>
>> But running my function again I still get the same error
>>
>> > FindHighRow(filteredDates,theTimeSeries,2,3)
>>
>> Error in if (length(c(year, month, day, hour, min, sec)) == 6 && c(year,
>> :
>>
>>   missing value where TRUE/FALSE needed
>>
>> In addition: Warning messages:
>>
>> 1: In as_numeric(YYYY) : NAs introduced by coercion
>>
>> 2: In as_numeric(YYYY) : NAs introduced by coercion
>>
>> > FindHighRow
>>
>> function(searchVector, highColumnIndex, thisDate, nextDate)
>>
>> {
>>
>>   dateFilter <- GetDateRangeString(thisDate,nextDate)
>>
>>   filtered <- searchVector[dateFilter]
>>
>>   returnRow <- filtered[which.max(filtered[,highColumnIndex])]
>>
>>   returnRow
>>
>> }
>>
>> > dateFilter <- GetDateRangeString(thisDate,nextDate)
>>
>> > dateFilter
>>
>> [1] "2007-10-01::2008-01-01"
>>
>> > filtered <- searchVector[dateFilter]
>>
>> > returnRow <- filtered[which.max(filtered[,highColumnIndex])]
>>
>> > head(returnRow,10)
>>
>>              Open      High     Low       Close
>>
>> 2007-10-10   1564.72   1576.09  1546.72   1554.41
>>
>>
>> So as I hope you can see, it works by hand but not within a function.
>>
>> That's why I think it's a bug.
>>
>>
>> Just for replicability (I hope)
>>
>> GetDateRangeString <- function(thisDate,nextDate)
>> {
>>   GetDateRangeString <-
>> paste(EnsureDate(thisDate),"::",EnsureDate(nextDate),sep="")
>> }
>>
>> EnsureDate <- function(maybeWrongFormat)
>> {
>>   as.POSIXct(strptime(maybeWrongFormat, "%Y-%m-%d"))
>> }
>>
>>
>>
>> And theTimeSeries is
>>
>> theTimeSeries <- getSymbols(tckr, from="2000-01-01",
>> to="2013-01-01",auto.assign=FALSE)
>>
>>
>> I'm too much of a newbie to suggest how to fix this (or what else it
>> might be) so I thought I'd report it to the list and see what happens.
>>
>> If any of this code doesn't work (I've cleaved it out of a bigger
>> project) just let me know and I'll fill in any missing pieces.
>>
>> Regards,
>>
>> Bit Rocker
>>
>
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to