Generalized 2D list/array/whatever?
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] ] 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