Как сделать цикл for необязательным - PullRequest
0 голосов
/ 14 октября 2019

Я хочу запустить скрипт, который оценивает выражение в зависимости от логической переменной либо внутри цикла for, либо только один раз.

Код должен выглядеть примерно так:

forCond <- function(..., cond, expr) ifelse(cond, for(...) expr, expr)

Но я не совсем уверен, как работает многоточие с тремя точками. Моя идея состояла в том, чтобы использовать это, чтобы передать что-то вроде i in vec для функции. И аргумент (ы), передаваемый ..., должен игнорироваться, если cond равен FALSE.

Я хочу, чтобы мой код

forCond(i in vec, cond, expr)

был эквивалентен

if (cond) {
  for(i in vec) 
    expr
} else {
  expr
}

Как мне сделать это элегантно? Или есть лучший способ сделать это, а именно, вычислить выражение несколько раз (с разными переменными счета), возможно, используя что-то вроде lapply?

Я приведу пример:

cond <- TRUE
vec <- 1:10
i <- 1 # Initialize i in case cond is FALSE
forCond(i in vec, cond,
  {
    print(i)
    print(2 * i)
  })

Предполагается, что это то же самое, что и

for(i in vec) {
  print(i)
  print(2 * i)
}

И в случае, если cond равно FALSE, я хочу что-то вроде

i <- 1
print(i)
print(2 * i)
...