2016-12-20 48 views
0

我是使用match.arg作爲R函數中默認值規範的新手。我有一個關於下面的行爲的查詢。在多個參數中使用match.arg時出錯

trial_func <- function(a=c("1","9","20"),b=c("12","3"),d=c("55","01")){ 
    a <- match.arg(a) 
    b <- match.arg(b) 
    d <- match.arg(d) 
    list(a,b,d) 
} 
trial_func() 
# [[1]] 
# [1] "1" 
# 
# [[2]] 
# [1] "12" 
# 
# [[3]] 
# [1] "55" 

當我嘗試使用match.arg爲每個單獨的參數,它按預期工作。但是當我嘗試使用lapply來減少寫入的代碼時,會導致下面的問題。

trial_func_apply <- function(a=c("1","9","20"),b=c("12","3"),d=c("55","01")){ 
    lapply(list(a,b,d), match.arg) 
} 
trial_func_apply() 

錯誤FUN(X [我],...): 'ARG' 必需是長度爲1

我在這裏失去了一些東西?

回答

0

調查了一下後,你需要通過你的角色矢量是空的說法,即

trial_func_apply <- function(a=c("1","9","20"),b=c("12","3"),d=c("55","01")){ 
    lapply(list(a,b,d), function(i)match.arg(NULL, i)) 
} 

trial_func_apply() 
#[[1]] 
#[1] "1" 

#[[2]] 
#[1] "12" 

#[[3]] 
#[1] "55" 
+0

是啊,似乎工作。爲什麼會發生這種情況? – prateek1592

+0

看來你的'a','b','c'代表函數的'choices'參數而不是'arg'。除此之外,我不熟悉這個功能,所以不能肯定地說 – Sotos

相關問題