![](/img/trans.png)
[英]How can i set a "key" argument in a gather function using a variable?
[英]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.