Вот грязный способ ее решения:
data:
a = as.table(array(c(1:8), dim=c(2,2,2)))
Ваши динамические индексы должны быть текстовыми: (это новый вопрос о том, как вы переводите свое состояние встрока типа index
, index2
)
index = "1,,"
index2 = ",2,"
функция:
crazyIndexing <- function(obj, index) {
stringExpr = paste0(obj, "[",index,"]")
return(eval(parse(text=stringExpr)))
}
вызовите вашу функцию: (посмотрите, как она работает!)
a[1,,]
crazyIndexing("a",index)
a[,2,]
crazyIndexing("a",index2)
обратите внимание:
b=c("","",""); b[1]="1"
index = paste0(b, collapse = ",")
#[1] "1,,"
Вы, конечно, можете соответственно изменить свою функцию:
crazyIndexing2 <- function(obj, obj2, index) {
stringExpr = paste0(obj ,"[",index,"]", "<-", obj, "[",index,"]", "+", obj2)
eval(parse(text=stringExpr))
return( get(obj) )
}
a = as.table(array(c(1:8), dim=c(2,2,2)))
aa = a[,2,]
aopt = crazyIndexing2("a","aa","1,,")
Теперь у вас есть все инструменты.