Управление использованием входного значения аргумента внутри функции R - PullRequest
1 голос
/ 18 мая 2019

Моя функция foo предназначена для вычисления переменной с именем d с использованием одного из ее аргументов: s, t или f.

Например, если пользователь используетfoo(n = 30:35, s = 1:2, t = 3:5, f = 7) Я хочу, чтобы foo сначала вычислил d, используя t, затем f, а затем s.Таким образом, в выводе я ожидаю 6 d с (то есть 2 от t, 1 от f и 2 от s).

Я хочу, чтобы первые 2 n были для t, следующие n были для f, а оставшиеся n были для s.Есть ли способ, которым я могу управлять n с внутри функции таким образом?

foo <- function(n, s = NULL, t = NULL, f = NULL){

d1 <- if(!is.null(t)) t + n else NULL
d2 <- if(!is.null(f)) f^2 + n else NULL

m <- if(!is.null(s)) s/2 + n else NULL
r <- if(!is.null(m)) m + 1 else NULL

d3 <- if(!is.null(m)) m + r else NULL

data.frame(d = c(d1, d2, d3))
}

 # Example of use:
 foo(n = 30:35, s = 1:2, t = 3:5, f = 7)

1 Ответ

1 голос
/ 18 мая 2019

Мы можем пройтись по элементам 't', 'f', 's', добавить (+) с помощью 'n' и получить вывод в виде list

foo <- function(n, s = NULL, t = NULL, f = NULL){

      dts <-  if(!is.null(t)) sapply(t, `+`, n) else NULL
      dfs <- if(!is.null(f)) sapply(f^2, `+`,  n) else NULL

      ms <- if(!is.null(s)) sapply(s/2, `+`,  n) else NULL
      rs <- if(!is.null(ms)) ms + 1 else NULL

      dss <- if(!is.null(ms)) ms + rs else NULL

      list(t_out =dts, f_out = dfs, s_out = dss)
      }

 # Example of use:
foo(n = 30:35, s = 1:2, t = 3:5, f = 7)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...