R: Подсчет триплетов с суммой меньше заданного значения

Мне удалось найти несколько решений этой проблемы на других языках, но, похоже, я не могу понять это правильно в R. Вот что у меня так далеко:

По заданному массиву (-2, 0, 1, 3) найти количество триплетов меньше, чем заданная переменная суммы.

sum = 2
ar<-c(-2, 0, 1, 3);ar

sumtrip<- function (vec,n,sum) {
  ctr=0
  for (i in 1:n-2){
    for (j in i+1:n-1){
      for (k in j+1:n){
        if ((vec[i]+vec[j]+vec[k]) < sum){
          ctr=ctr+1
        }
      }
    }
  }
return(ctr)
}

sumtrip(ar,length(ar),sum)

Это приводит к: Ошибка в vec[i] + vec[j]: не числовой аргумент для бинарного оператора

2 ответа

Решение

У вас просто плохая пунктуация. Это должно делать то, что вы хотите. Пожалуйста, сравните ваши скобки с моими.

sum = 2
ar<-c(-2, 0, 1, 3);ar

sumtrip<- function (vec,n,sum) {
  ctr=0
  for (i in 1:(n-2)){
    for (j in (i+1):(n-1)){
      for (k in (j+1):n){
        if ((vec[i]+vec[j]+vec[k]) < sum){
          ctr=ctr+1
        }
      }
    }
  }
return(ctr)
}

sumtrip(ar,length(ar),sum)

Ты можешь использовать combn:

sum(combn(c(-2, 0, 1, 3), 3, function(x) sum(x)<2))
# [1] 2
Другие вопросы по тегам