#r
#r
Вопрос:
Есть ли способ написать всеобъемлющее выражение без использования условия if-else для обоих случаев.
Спасибо
n
может принимать значение — 0 или 1
if (n == 2)
{
output <- c(0.5, 0.5)
} else
{
output <- c(1, 0)
}
- сгенерировать tibble с помощью x и y, основываясь на значении
n
— 0 или 1
library(tidyverse)
N = 1000
if (n == 1)
{
x <- runif(N/n, min = 0, max = 5)
y <- runif(N/n, min = 0, max = 5)
tbl <- tibble(x, y)
} else
{
x1 <- runif(N/n, min = 0, max = 5)
y1 <- runif(N/n, min = 5, max = 10)
x2 <- runif(N/n, min = 5, max = 10)
y2 <- runif(N/n, min = 0, max = 5)
tbl <- tibble(x = c(x1, x2),
y = c(y1, y2))
}
Ответ №1:
Это может быть более применимо с switch
f1 <- function(n) {
n <- deparse(substitute(n))
switch(n, `2` = c(0.5, 0.5), c(1, 0))
}
f1(1)
#[1] 1 0
f1(2)
#[1] 0.5 0.5
f1(5)
#[1] 1 0
Ответ №2:
Если вы хотите избежать использования if...else ...
, возможно, приведенный ниже код будет вариантом:
- Случай 1
list(c(1, 0), c(0.5, 0.5))[[(n == 2) 1]]
- Случай 2
list(
{
x1 <- runif(N / n, min = 0, max = 5)
y1 <- runif(N / n, min = 5, max = 10)
x2 <- runif(N / n, min = 5, max = 10)
y2 <- runif(N / n, min = 0, max = 5)
tbl <- tibble(
x = c(x1, x2),
y = c(y1, y2)
)
},
{
x <- runif(N / n, min = 0, max = 5)
y <- runif(N / n, min = 0, max = 5)
tbl <- tibble(x, y)
}
)[[(n == 1) 1]]