簡體   English   中英

如何在此處設置條件函數參數值?

[英]How can I set a conditional function argument value here?

我想基於另一個參數的值自動在函數中設置參數的值。

更具體地說,我想設置一個時區值( offset )以自動調整給定region時間值。

但是,我的實現似乎不起作用(因為偏移量永遠不會應用,除非我專門將它作為參數傳遞給函數)。

該函數的一部分(應該)根據region的值設置offset值,並且還連接到相應的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
}

(請注意,我已將offset的默認值設置為"+00" ,否則它將拋出錯誤的參數缺失。)

顯然,我在某個地方出錯了,因為除非我在參數列表中明確指定,否則永遠不會應用偏移量。

這就是我想做的:

如果region == "US" ,則將offset設置為"-06:00:00" ,否則,如果region == "EU" ,則將offset設置為"+00:00:00" Else Error message: "supply valid region"

簡而言之,我希望設置一個條件參數值。

我該如何實現?

您的代碼正常工作。

> 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

事實證明,我已經按照分配執行的順序進行了監督,並且剛剛發現了它。

對於那些可能遇到類似問題的人,可能值得強調一下我做錯了什么:我在使用offset值后設置了offset值,這意味着使用/處理了offset值(使用上一次迭代的值),然后為其分配了新值。值。

簡而言之,我的實現是完全正確的,但是事件的順序是不正確的

因此,請確保在處理所需的值之前先進行設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM