如何在編寫自己的函數(shù)時使用R的省略功能?R語言有一個很好的特性來定義函數(shù),這些函數(shù)可以使用可變數(shù)量的參數(shù)。例如,函數(shù)data.frame接受任意數(shù)量的參數(shù),每個參數(shù)將成為結果數(shù)據(jù)表中某列的數(shù)據(jù)。示例用法:> data.frame(letters=c("a", "b", "c"), numbers=c(1,2,3), notes=c("do", "re", "mi"))
letters numbers notes1 a 1 do2 b 2 re3 c 3 mi函數(shù)的簽名包括省略號,如下所示:function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,
stringsAsFactors = default.stringsAsFactors()) {
[FUNCTION DEFINITION HERE]}我想編寫一個類似的函數(shù),獲取多個值并將它們合并為一個返回值(以及一些其他處理)。為了做到這一點,我需要弄清楚如何“解壓”...函數(shù)中的參數(shù)。我不知道該怎么做。函數(shù)定義中的相關行data.frame是object <- as.list(substitute(list(...)))[-1L]我完全搞不懂。那么,如何將省略號從函數(shù)的簽名轉換成列表呢?更確切地說,我怎么寫get_list_from_ellipsis在下面的代碼里?my_ellipsis_function(...) {
input_list <- get_list_from_ellipsis(...)
output_list <- lapply(X=input_list, FUN=do_something_interesting)
return(output_list)}my_ellipsis_function(a=1:10,b=11:20,c=21:30)編輯似乎有兩種可能的方法來做到這一點。他們是as.list(substitute(list(...)))[-1L]和list(...)..然而,這兩種做法并不完全相同。(關于差異,請參見答案中的示例。)誰能告訴我他們之間的實際區(qū)別是什么,以及我應該使用哪一個?
3 回答

慕工程0101907
TA貢獻1887條經(jīng)驗 獲得超5個贊
list()
> test.func <- function(...) { lapply(list(...), class) }> test.func(a="b", b=1)$a[1] "character"$b[1] "numeric"
get_list_from_ellipsis
list
.
c()
data.frame()
...

LEATH
TA貢獻1936條經(jīng)驗 獲得超7個贊
get_list_from_ellipsis1 <- function(...){ list(...)}get_list_from_ellipsis1(a = 1:10, b = 2:20) # returns a list of integer vectors$a [1] 1 2 3 4 5 6 7 8 9 10$b [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
get_list_from_ellipsis2 <- function(...){ as.list(substitute(list(...)))[-1L]}get_list_from_ellipsis2(a = 1:10, b = 2:20) # returns a list of calls$a1:10$b2:20
my_ellipsis_function
- 3 回答
- 0 關注
- 1133 瀏覽
添加回答
舉報
0/150
提交
取消