Несколько, если условия в карте от purrr - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь создать новый символьный вектор в R на основе входного значения, присутствующего в символьном векторе «оператор». Переменная оператора содержит такие значения, как ">", "<" "" и NULL. Мне нужно создать новый вектор, как operator_id, который имеет эквивалентный числовой код для вышеуказанных математических операторов. Пожалуйста, найдите код, который я написал для цикла. Однако это занимает много времени, и есть ли другой эффективный способ написания этого кода? </p>

for (ch in operator){
  if (ch == ""){
    #print("hi")
    operator_concept_id = append(operator_concept_id, 4172703L)
    value_as_concept_id = append(value_as_concept_id, 45884084L)
  } else if (ch == ">"){
    #print("hello")
    operator_concept_id = append(operator_concept_id, 4172704L)
    value_as_concept_id = append(value_as_concept_id, 45876384L)
  } else if (ch == "<"){
    #print("less")
    operator_concept_id = append(operator_concept_id, 4171756L)
    value_as_concept_id = append(value_as_concept_id, 45881666L)
  }
  else if(ch== "-"){
    #print("negative")
    operator_concept_id = append(operator_concept_id, 4172703L)
    value_as_concept_id = append(value_as_concept_id, 45878583L)
  } else{
    #print("nothing")
    operator_concept_id = append(operator_concept_id, 0L)
    value_as_concept_id = append(value_as_concept_id, 45881630L)
  }
}

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Мы могли бы использовать оператор switch:

for (ch in operator){
  switch(ch, 
         ">"={
           #print("hello")
           operator_concept_id = append(operator_concept_id, 4172704L)
           value_as_concept_id = append(value_as_concept_id, 45876384L)   
         },
         "<"={
           #print("less")
           operator_concept_id = append(operator_concept_id, 4171756L)
           value_as_concept_id = append(value_as_concept_id, 45881666L)
         },
         "-"={
           #print("negative")
           operator_concept_id = append(operator_concept_id, 4172703L)
           value_as_concept_id = append(value_as_concept_id, 45878583L) 
         },
         {
           #print("hi")
           operator_concept_id = append(operator_concept_id, 4172703L)
           value_as_concept_id = append(value_as_concept_id, 45884084L)
         }
  )

}

Обратите внимание, что мы не можем включить "", вместо этого я использовал это в качестве опции по умолчанию в конце, поэтому все, что не соответствует предыдущим случаям, будетвыполнить как эту опцию.

0 голосов
/ 15 марта 2019

Надеюсь, я правильно понял цель, это возможное решение:

Operators<-c(">","<","NULL")#Did not use a real `NULL`
Numerics<-c(1234,567,8910)
purrr::map2(Operators,Numerics,function(x,y) append(x,y))

Результат:

#[[1]]
#[1] ">"    "1234"

#[[2]]
#[1] "<"   "567"

#[[3]]
#[1] "NULL" "8910"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...