第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在編寫自己的函數(shù)時使用R的省略功能?

如何在編寫自己的函數(shù)時使用R的省略功能?

江戶川亂折騰 2019-06-27 16:37:14
如何在編寫自己的函數(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(),然后對其執(zhí)行操作:

> test.func <- function(...) { lapply(list(...), class) }> test.func(a="b", b=1)$a[1] "character"$b[1] "numeric"

所以你的get_list_from_ellipsis函數(shù)只不過是list.

這方面的有效用例是當您希望傳遞數(shù)目未知的要操作的對象時(如c()data.frame())。使用...但是,當您預先知道每個參數(shù)時,因為它增加了參數(shù)字符串的一些模糊性和進一步的復雜性(并且使函數(shù)簽名對任何其他用戶都不明確)。參數(shù)列表是函數(shù)用戶的重要文檔。

否則,當您希望將參數(shù)傳遞給子函數(shù)而不將它們?nèi)勘┞对谀约旱暮瘮?shù)參數(shù)中時,它也很有用。這可以在功能文檔中看到。


查看完整回答
反對 回復 2019-06-27
?
LEATH

TA貢獻1936條經(jīng)驗 獲得超7個贊

為了補充Shane和Dirk的回答:比較一下是很有趣的

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雖然第一條顯然更簡單


查看完整回答
反對 回復 2019-06-27
  • 3 回答
  • 0 關注
  • 1133 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號