[R] Generalized 2D list/array/whatever?

David Winsemius dwinsemius at comcast.net
Fri Apr 24 06:21:00 CEST 2009


On Apr 24, 2009, at 12:16 AM, David Winsemius wrote:

> I cannot figure out what you are trying to do, but I'm reasonably  
> sure that the construction:
>
> xxx[[index,index2]] ... is going to fail. If you want to create a  
> two dimensional structure, most people would use either a dataframe  
> or a matrix rather than a list, although lists have the advantage  
> that they do not need to be "pre-dimensioned". If you know what your  
> dimension are in advance they are probably the way to go.
>
> If you want to access multiple "dimensions" of a list, do not use  
> [[ , ]] but rather [[ idx ]] to get the desired first "dimension"  
> and then [ idx2 ] to the right of the expression for the first  
> "dimension" to get or change the second "dimension", although  
> "level" or "depth" might be the better terminology.
>
> m <- list(sin, 1:3, letters[1:3], expression(a+b))
> m[[2]][3] # ]
# that "]" shouldn't be there
>
> m[[2]][3] <- 8
> m
> m[[2]][3]
>
> You have a better chance of getting on target advice if you explain  
> what you want to do rather than showing us code patterned on another  
> language that obviously doesn't work in R.
>
> On Apr 23, 2009, at 10:29 PM, Toby wrote:
>
>> I must be going about my idea really backwards.  I have functions  
>> like so:
>>
>> Nasa_PART_Bounds <- rbind(Nasa_PART_Bounds, c("Nasa_PART_B1"))
>> Nasa_PART_B1 <- function(l,u) {
>>       l[["Nasa_PART_B1", "CYCLOMATIC_COMPLEXITY"]] <- 8
>>       u[["Nasa_PART_B1", "CYCLOMATIC_COMPLEXITY"]] <- 60
>>       l[["Nasa_PART_B1", "LOC_TOTAL"]] <- 73
>> }
>>
>> Where I add the function names of each "bounds" function to a list,
>> which later on get called with two variables.
>>
>> dispatch2 <- function(f, x, y) {
>>       eval(call(f, x, y))
>> }
>>
>> for (i in bounds) {
>>       bb <- eval(substitute(foo[,1], list(foo=as.name(i))))
>>       rr <- lapply(bb, dispatch2, lb, ub)
>> }
>>
>> However, I don't know how to do this in a better "R" way.  I think  
>> my C and
>> pearl experience is showing through... :(
>>
>> -Toby.
>>
>>
>> On Thu, Apr 23, 2009 at 8:20 PM, Gabor Grothendieck <ggrothendieck at gmail.com
>>> wrote:
>>
>>> Matrix made from a list:
>>>
>>> m <- list(sin, 1:3, letters[1:3], expression(a+b))
>>> dim(m) <- c(2, 2)
>>> dimnames(m) <- list(letters[1:2], LETTERS[1:2])
>>> class(m) # matrix
>>>
>>> or
>>>
>>> M <- structure(list(sin, 1:3, letters[1:3], expression(a+b)), .Dim  
>>> = c(2,
>>> 2),
>>> .Dimnames = list(c("a", "b"), c("A", "B")))
>>> class(M) # matrix
>>>
>>> On Thu, Apr 23, 2009 at 10:03 PM, Toby  
>>> <tobias.weingartner at gmail.com>
>>> wrote:
>>>> I'm trying to figure out how I can get a generalized 2D
>>>> list/array/matrix/whatever
>>>> working.  Seems I can't figure out how to make the variables the  
>>>> right
>>>> type.  I
>>>> always seem to get some sort of error... out of bounds, wrong  
>>>> type, wrong
>>>> dim, etc.
>>>> Very confused... :)
>>>>
>>>> x[["some label", "some other index"]] <- 3
>>>> x[["some other label", "something else"]] <- 4
>>>>
>>>> I don't know the indexes/label ahead of time... they get  
>>>> generated...
>>> Any
>>>> thoughts?
>

David Winsemius, MD
Heritage Laboratories
West Hartford, CT




More information about the R-help mailing list