Любой возможный способ проверить условие без использования каких-либо операторов управления в R - PullRequest
2 голосов
/ 30 января 2020
if(x == y){
  text <- "string_1"
}else if(x < y){
  text <- "string_2"
}else if(x > y){
  text <- "string_3"
}

Есть ли какой-нибудь возможный способ избавиться от этих пунктов? Можем ли мы использовать любую математическую операцию, чтобы выяснить это?

Ответы [ 4 ]

3 голосов
/ 30 января 2020

Вы можете использовать sign до подмножество вектор для условий ==, < и >.

text <- c("string_2", "string_1", "string_3")[sign(x-y)+2]
1 голос
/ 30 января 2020

На самом деле я не вижу пути решения вашей проблемы (мне кажется, проблемы - это ужасный код). Вы можете написать это более кратким, хотя.

if(x == y) text <- "string_1"
if(x < y) text <- "string_2" 
if(x > y) text <- "string_3"
1 голос
/ 30 января 2020

Используя data.table, вы можете сделать:

library(data.table)
fcase(
  x == y, "string_1",
  x <  y, "string_2",
  default = "string_3"
)

По состоянию на январь 2020 года эта функция все еще только в версии для разработки пакета.

1 голос
/ 30 января 2020

Ответ: Да, вы можете сделать это без контрольных операторов.

Вы можете попробовать следующий код

r <- c("string_1","string_2","string_3")[c(x==y,x<y,x>y)]

или

r <- subset(c("string_1","string_2","string_3"), c(x==y,x<y,x>y))

или

r <- c("string_1","string_2","string_3")[crossprod(diag(+c(x==y,x<y,x>y)), 1:3)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...