Как я могу субиндексировать многострочный массив с вектором, который сохраняет пробелы - PullRequest
0 голосов
/ 04 октября 2018

В качестве минимального примера рассмотрим следующий многострочный массив (a):

a = as.table(array(c(1:8), dim=c(2,2,2)))

Для этого массива ручная подиндексация проста, например,

a[1,,] (матрица 2 x 2)которые соответствуют измерению 1, находящемуся в состоянии 1 (A))

Мой вопрос сейчас;как я могу сделать то же самое с вектором, который сохраняет пробелы, например что-то вроде c(1,,).

Обратите внимание, что мне нужно определить, какие измерения оставлены пустыми (динамически) на основе наблюдаемых переменных в экземпляре;Моей первоначальной мыслью была общая идея.вектор b = c ("", "", ""), где я мог бы заменить переменную 1 на 1, если это наблюдалось как в состоянии 1, например, b [1] = "1", но, прежде всего, я делаюне знаю, как использовать этот вектор для обозначения ["b"], или есть ли лучший способ сделать это.

Мне нужна эта динамическая индикация, потому что я хочу обновить части таблицы, как яполучить доказательства (информация == имеет значение)

Большое спасибо заранее!

Лучший, Себастьян

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Вот как бы я это сделал:

while (evidence) {
    idx <- lapply(dim(a), function (dimsize) 1:dimsize)
    ## update `idx` according to `evidence`, e.g.,
    ## if you want to do `a[1,,2]`
    idx[[1]] <- 1
    idx[[3]] <- 2
    do.call(`[`, c(list(a), idx))
    ## if you want to do `a[1,,2] <- c(20, 30)`
    a <- do.call(`[<-`, c(list(a), idx, list(value=c(20, 30))))
}
0 голосов
/ 04 октября 2018

Вот грязный способ ее решения:

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,,")

Теперь у вас есть все инструменты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...