我的進行中函數之一調用grep()
與value = TRUE
硬編碼。我想通過所有的進一步論證除了value
到grep()
到...
。以下兩個函數是我迄今爲止所做的測試,但都沒有完成任務。如何通過「...」傳遞一些(但不是全部)更多參數
使用時排除一個或多個更多參數的最佳方法是什麼...
?
實踐功能1:
f <- function(pattern, x, ...)
{
dots <- list(...)
if('value' %in% names(dots))
dots <- dots[!grepl('value', names(dots))]
grep(pattern, x, value = TRUE, ...)
}
XX <- c('bct', 'abc', 'fds', 'ddabcff', 'jkl')
## test f()
f('abc', XX, value = TRUE) ## to test the error if user enters 'value' argument
# Error in grep(pattern, x, value = TRUE, ...) :
# formal argument "value" matched by multiple actual arguments
f('abc', XX, invert = TRUE)
# [1] "bct" "fds" "jkl"
f('ABC', XX, ignore.case = TRUE)
# [1] "abc" "ddabcff"
實踐功能2:
h <- function(pattern, x, ...) x[grep(pattern, x, ...)]
## test h()
h('abc', XX, value = TRUE)
# [1] NA NA
h('abc', XX, invert = TRUE)
# [1] "bct" "fds" "jkl"
h('ABC', XX, ignore.case = TRUE)
# [1] "abc" "ddabcff"
是否與包括價值是一個問題一個命名參數? – Dason
是的,它必須設置爲TRUE。我將從我正在編寫的函數發佈片段。 –
解決方法是將'f'中的最後一行更改爲'do.call(「grep」,c(list(pattern = pattern),list(x = x),value = TRUE,dots))'where在「點」中,你排除了「價值」的論點。 –