首页 > 解决方案 > 如何在这里设置条件函数参数值?

问题描述

我想根据另一个参数的值自动设置函数中参数的值。

更具体地说,我想设置一个时区值(offset)来自动调整给定的时间值region

但是,我的实现似乎不起作用(因为永远不会应用偏移量,除非我专门将它作为参数传递给函数)。

部分功能(应该)offset根据region's 的值设置值,并连接到相应的 Elasticsearch 服务器。

这就是我所拥有的:

if (region == "EU") {
    offset = "+00:00:00"
    # Code to connect to EU ElasticSearch server
  } else if (region == "US") {
    offset = "-06:00:00"
    # Code to connect to US ElasticSearch server
  } else {
  paste0(stop("Incorrect region supplied: ", region))
}

功能:

time_function <- function(region, retailer, start_date, end_date, offset = "+00:00:00"){
    # Function body
}

(注意我已经设置了offsetto的默认值"+00",否则会抛出参数丢失的错误。)

显然我在某个地方出错了,因为除非我在参数列表中明确指定,否则永远不会应用偏移量。

这就是我想要做的:

如果region == "US", 则设置offset"-06:00:00", Else 如果region == "EU", 则设置offset"+00:00:00" ElseError message: "supply valid region"

简而言之,我希望设置一个条件参数值。

我怎样才能做到这一点?

标签: rfunctionconditional

解决方案


你的代码工作。

> time_function <- function(region){
+   # Function body
+   if (region == "EU") {
+     offset = "+00:00:00"
+     # Code to connect to EU ElasticSearch server
+   } else if (region == "US") {
+     offset = "-06:00:00"
+     # Code to connect to US ElasticSearch server
+   } else {
+     stop(paste0("Incorrect region supplied: ", region))
+   }
+   
+   return(offset)
+ }
> 
> time_function("EU")
[1] "+00:00:00"
> time_function("US")
[1] "-06:00:00"
> time_function("CH")
Error in time_function("CH") : Incorrect region supplied: CH

要优化您的代码,您可以使用该开关。

> time_function <- function(region){
+   # Function body
+   offset <- switch(region,
+       EU = "+00:00:00",
+       US = "-06:00:00",
+       stop(paste0("Incorrect region supplied: ", region)))
+ 
+   return(offset)
+ }
> 
> time_function("EU")
[1] "+00:00:00"
> time_function("US")
[1] "-06:00:00"
> time_function("CH")
Error in time_function("CH") : Incorrect region supplied: CH

有两个参数:

> time_function <- function(region){
+   # Function body
+   list2env(switch(region,
+          EU = list(offset = "+00:00:00", con = "EU_con"),
+          US = list(offset = "+00:00:00", con = "US_con"),
+          stop(paste0("Incorrect region supplied: ", region))), envir = environment())
+   
+   return(c(offset, con))
+ }
> 
> time_function("EU")
[1] "+00:00:00" "EU_con"   
> time_function("US")
[1] "+00:00:00" "US_con"   
> time_function("CH")
Error in list2env(switch(region, EU = list(offset = "+00:00:00", con = "EU_con"),  : 
  Incorrect region supplied: CH

推荐阅读