我想用可选参数创建一个函数。我正在研究一个有收入,状态和一些旗帜的数据集。该函数接受数据,状态和标志并对其进行过滤。如果缺少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))}
答案 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'))