[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