[R-sig-Geo] bug in process definition for retrieving point pair indexes from varigramCloud
Mark Connolly
wmconnol at ncsu.edu
Sun Feb 28 20:16:57 CET 2010
Does .BigInt always exist and always contain the appropriate divisor
regardless of the architecture? If not, does it exist _only_ for 64-bit
architectures?
Is the result of the operation always an offset, regardless of the
architecture? (I am presuming yes, but I don't have access to a 32-bit
machine right now).
If I am writing R code to extract left and right appropriately, I'd like
to make sure it is portable across architectures. I am presuming that
this is the best way to get left and right. Capturing the results of
print(variogramCloud) seems kludgy.
Better method than both of these available?
On 02/28/2010 10:37 AM, Edzer Pebesma wrote:
> Well, they're called first and second, and a bit later they're named
> "left" and "right", it nowhere says that "left" is first, or second.
>
> As you say, there's little point in making the distinction anyway;
> give me a case where it is confusing and I'll change it.
> --
> Edzer
>
> Mark Connolly wrote:
>> Thanks. That works better.
>>
>> It looks as though the documentation has left and right (implicitly)
>> switched? I am drawing line segments in 3D space using rgl, and I
>> don't care so much about the order. Might be confusing in some cases.
>>
>>
>> On 02/28/2010 09:49 AM, Edzer Pebesma wrote:
>>> Mark, the documentation falsely assumes all computers have 32 bits
>>> integers; yours seems not -- compare the .BigInt with sqrt(2^64). To
>>> see how the point pairs are obtained, look at:
>>>
>>> > gstat:::as.data.frame.variogramCloud
>>> function (x, row.names, optional, ...)
>>> {
>>> .BigInt = attr(x, ".BigInt")
>>> x$left = x$np%%.BigInt + 1
>>> x$right = x$np%/%.BigInt + 1
>>> x$np = NULL
>>> class(x) = "data.frame"
>>> x
>>> }
>>>
>>> so the .BigInt attribute is the divisor; 1 is added because the
>>> arrays are set up in the C code, starting at 0.
>>> --
>>> Edzer
>>>
>>> Mark Connolly wrote:
>>>> gstat reference states
>>>>
>>>> If cloud is TRUE: an object of class variogramCloud, with the field
>>>> np encoding the numbers of the point pair that contributed to a
>>>> variogram cloud estimate, as follows. The first point is found by
>>>> the integer division of np by 2^16, the second point by the
>>>> remainder of that division.
>>>>
>>>> For
>>>> Classes ‘variogramCloud’ and 'data.frame': 3275 obs. of 6 variables:
>>>> $ np : num 8.59e+09 8.00 8.59e+09 1.29e+10 1.29e+10 ...
>>>> $ dist : num 18.8 79.2 77.8 78.7 100.1 ...
>>>> $ gamma : num 0.781 0.845 12.903 5.611 0.344 ...
>>>> $ dir.hor: num 0 0 0 0 0 0 0 0 0 0 ...
>>>> $ dir.ver: num 0 0 0 0 0 0 0 0 0 0 ...
>>>> $ id : Factor w/ 1 level "var1": 1 1 1 1 1 1 1 1 1 1 ...
>>>> - attr(*, "direct")='data.frame': 1 obs. of 2 variables:
>>>> ..$ id : Factor w/ 1 level "var1": 1
>>>> ..$ is.direct: logi TRUE
>>>> - attr(*, ".BigInt")= num 4.29e+09
>>>>
>>>>
>>>> v[1,] yields:
>>>> dist gamma dir.hor dir.ver id left right
>>>> 1 18.75474 0.78125 0 0 var1 6 3
>>>>
>>>>
>>>> v$np[1] %/% 2^16 yields:
>>>> 131072
>>>>
>>>> Which is != 6
>>>>
>>>> Am I misinterpreting the documentation?
>>>>
>>>
>>
>>
>
--
Graduate Student, Master of Science
Department of Soil Science
North Carolina State University
More information about the R-sig-Geo
mailing list