Cracked it! This does what I need.
#################
## Toy Example ##
#################
rm(list=ls())
library(nimble)
toyCode <- nimbleCode({
rate[1,1] <- state[1,1]
rate[2,1] <- state[1,1] + state[2,1] + state[3,1]
rate[3,1] <- state[1,1] + state[2,1]
rate[1,2] <- state[1,1] + state[2,2] + state[2,3]
rate[2,2] <- state[1,1] + state[3,3]
rate[3,2] <- state[1,1] + sum(state[3,])
})
inits <- list(state = matrix(1:9, nrow=3))
toyModel <- nimbleModel(toyCode, inits=inits)
toyModel[["state"]]
toyModel[["rate"]]
(stateIndices <- as.vector(outer(1:dim(toyModel[["state"]])[1], 1:dim(toyModel[["state"]])[2], paste, sep=",")))
(stateNodes <- paste0("state[",stateIndices,"]"))
(nStateNodes <- length(stateNodes))
(stateIndices <- paste0("row",sub(",","col",stateIndices)))
(rateIndices <- as.vector(outer(1:dim(toyModel[["rate"]])[1], 1:dim(toyModel[["rate"]])[2], paste, sep=",")))
(rateNodes <- paste0("rate[",rateIndices,"]"))
(nRateNodes <- length(rateNodes))
## Define list structures
innerList <- nimbleList(n = integer(0), txt = character(1))
(outerDef <- paste0("nimbleList(",paste0(stateIndices, "=innerList()", collapse=","),")"))
outerList <- eval(parse(text=outerDef))
## Create outer list
dependentRatesList <- outerList$new()
## Create inner list & fill outer list
for (iSN in 1:nStateNodes) { ## iSN=2
(deps <- toyModel$getDependencies(stateNodes[iSN]))
(deps <- deps[grep("rate", deps)])
eval(parse(text=paste0("dependentRatesList$",stateIndices[iSN], " <- innerList$new(n=", length(deps),", txt=deps)")))
}
print(dependentRatesList)