Введите пустой аргумент, если условие выполняется в R - PullRequest
1 голос
/ 10 марта 2019

Я пишу функцию, которая передает дополнительный аргумент функции, если выполняется определенное условие, в противном случае оставьте этот аргумент пустым.

Приведенный ниже код является примером, на котором строится «Sepal.Length», и если fn_y не равно NULL, то аргумент цвета также будет передан в функцию (т. Е. Разделить график рассеяния в соответствии с fn_y) .

fn_plotly <- function(fn_data, fn_x, fn_y){
  if(is.null(fn_y)){
      p <- plotly::plot_ly(data = fn_data, x = ~fn_data[[fn_x]], 
                           type = "scatter")
  } else {
      p <- plotly::plot_ly(data = fn_data, x =~ fn_data[[fn_x]], 
                           type = "scatter", color = fn_data[[fn_y]])
  }
  return(p)
}

fn_plotly(iris, "Sepal.Length", NULL)
fn_plotly(iris, "Sepal.Length", "Species")

Приведенный выше код работает, но мне было интересно, есть ли другой способ, который мог бы использовать функцию конвейера %>%, чтобы написать код немного короче, то есть что-то вроде этого

plotly::plot_ly(data = fn_data, x =~ fn_data[[fn_x]],type="scatter") %>% ifelse(is.null(fn_y),"",color = fn_data[[fn_y]] )

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

1 Ответ

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

Знаете ли вы, что вы можете получить тот же результат без if then else?

Смотрите это:

fn_plotly<-function(fn_data,fn_x,fn_y){


    p<-plotly::plot_ly(data = fn_data, x =~ fn_data[[fn_x]],type="scatter", color=fn_data[,fn_y])

  return(p)

}

fn_plotly(iris,"Sepal.Length",NULL)
fn_plotly(iris,"Sepal.Length","Species")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...