R:使用可选参数创建一个函数,不带if语句

时间:2017-06-24 17:41:35

标签: r

我想用可选参数创建一个函数。我正在研究一个有收入,状态和一些旗帜的数据集。该函数接受数据,状态和标志并对其进行过滤。如果缺少state和flag,则应返回整个数据,依此类推。到目前为止,我有这个代码工作正常。但是,我想知道是否有比这更简单的代码。

myfun <- function(data, states, flag){
  if(missing(states)) {
    if(missing(flag)) {
      new_data <- data
    } else {
      new_data <- subset(data, data$Flag == flag)
    }
  } else if(missing(flag)) {
    new_data <- subset(data, data$State == states)
  } else {
    new_data <- subset(data, (data$State == states & data$Flag == flag))
  }

  temp_data <- toJSON(new_data)
  save(temp_data, file = "Mydata.JSON")
  return(new_data)      
}

我知道我们可以通过使用flag = Y这样的默认参数来获取可选参数。但是如何传递默认参数中的两个参数,即flag = Y & N,或所有50个状态。我是R的新手,非常感谢任何帮助。

更新:通过Daniel Winkler找到了我想要的解决方案

test2 <- function(data,states = unique(data$State),flag = c("Y","N"))
{my_data<-subset(data, (data$State %in% states & data$Flag %in% flag))}

1 个答案:

答案 0 :(得分:1)

用于将多个值传递给函数:

myfun<-function(data,states,flag){


if(missing(states))
  {
    if(missing(flag))
    {
      new_data<-data
    }
    else
    {
      new_data<-subset(data, data$Flag %in% flag)
    }
  }     
  else if(missing(flag))
  {
    new_data<-subset(data, data$State %in% states)
  }
  else
  {
    new_data<-subset(data, (data$State %in% states & data$Flag %in% flag))
  }

  temp_data <- toJSON(new_data)
  save(temp_data, file="Mydata.JSON")
  return(new_data)      
}

然后致电:

all_states <- unique(mydata$States)
myfun(data = mydata, states = all_states, flag = c('Y', 'N'))