[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