Как найти соответствующие значения с учетом разных способов составов? - PullRequest
0 голосов
/ 06 февраля 2019

Я хотел бы найти все возможные композиции моего вектора данных, например, c (1:10).Для этого я использую функцию композиций из пакета "partitions".

Сначала я найду все возможные композиции.Например, я хочу разделить вектор длиной 10 на 3 части.

library(partitions)
compositions(10,3,include.zero = TRUE)
[1,] 10 9 8 7 6 5 4 3 2 1  0 9 8 7 6 5 4 3 2 1 0 8 7 6 5 4 3 2 1
[2,]  0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7
[3,]  0 0 0 0 0 0 0 0 0 0  0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2

[1,] 0 7 6 5 4 3 2 1 0 6 5 4 3 2 1 0 5 4 3 2 1 0 4 3 2 1 0 3 2 1
[2,] 8 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 0 1 2 3 4 5 0 1 2 3 4 0 1 2
[3,] 2 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 5 5 5 5 5 5 6 6 6 6 6 7 7 7

[1,] 0 2 1 0 1 0  0
[2,] 3 0 1 2 0 1  0
[3,] 7 8 8 8 9 9 10

Следующий шаг - найти все соответствующие значения, соответствующие каждой композиции.Это принесло некоторые проблемы, потому что некоторая ячейка могла быть нулевой.Я хочу получить нулевой результат, если в ячейке ничего нет.Что я сделал, чтобы вычислить совокупную сумму полученной выше матрицы.Например, состав с (1,3,6) станет с (1,4,10).Затем я написал функцию для поиска соответствующих значений.Вектор (1,4,10) является входным значением n в функции.

find_sequence <- function(n){

m=length(n)
temp=NULL
for(i in c(1:m)){
if(n[i]!=0) {
  temp[[i]]=list(1:n[i])
 }
 }
 idx=NULL
idx[[1]]=temp[[1]]
for(i in 2:m){
idx[[i]]=list(setdiff(unlist(temp[[i]]),unlist(temp[[i-1]])))
 }
  idx
 }

Таким образом, я могу получить все соответствующие значения для разных композиций с разрешенным нулевым результатом.Но я думаю, что этот способ немного утомителен, и мне интересно, есть ли какое-нибудь хорошее решение для этого.

Я ожидаю получить три клетки (1,2,3,4,5,6), (7,8,9), (10) для композиции (6,3,1) из одной из композиций результата.Мне нужно будет сделать это для всех композиций.Особенно для значения 0 в композиции, я хочу, чтобы выходные значения были нулевыми.Например, (ноль), (1), (2,3,4,5,6,7,8,9,10) для композиции (0,1,9).

Я надеюсь, чтоНе используйте слишком много списков, чтобы немного ускорить программу.Спасибо.

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