Fre*_*son 5 r parameter-passing non-standard-evaluation rlang
我正在努力...在特定的情况下化解我的论点,但我不明白为什么。
我可以创建一个这样的函数并...适当地化解:
library(dplyr)\nlibrary(tidyr)\n\nfill_na <- function(.x,...){\n\n dotArgs <- rlang::dots_list(...,.named=TRUE,.homonyms="last")\n tidyr::replace_na(.x,dotArgs) \n\n}\n\ndf <- tibble::tribble(\n ~colA, ~colB,\n "a", 1,\n "b", 2,\n "c", NA,\n NA, 4\n)\n\n> fill_na(df,colA="c",colB=2)\n# A tibble: 4 \xc3\x97 2\n colA colB\n <chr> <dbl>\n1 a 1\n2 b 2\n3 c 2\n4 c 4\nRun Code Online (Sandbox Code Playgroud)\n太好了,但是如果我做这个功能
\nmyFun <- function(inside_of,from_what, ... ,.metadata_defaults=list("Gender"="Undefined","Age"=35),.by_maxFormantHz=TRUE,.recompute=FALSE,.package="superassp"){\n\n dotArgs <- rlang::dots_list(...,.named=TRUE,.homonyms="last")\n return(1)\n\n}\nRun Code Online (Sandbox Code Playgroud)\n我得到这个结果:
\n> myFun(inside_of=ae,from_what=forest,fs=fm, fbw=bw)\nError in rlang::dots_list(..., .named = TRUE, .homonyms = "last") : \n object 'fm' not found\nRun Code Online (Sandbox Code Playgroud)\n为什么这里的争论没有被化解,而在第一个例子中却被化解了?
\n这些点在您的任何一个函数中都被消除了。根据文档,dots_list()\xe2\x80\x9c评估包含在其中的所有参数...并将它们作为列表返回\xe2\x80\x9d(添加了强调)。您只是在函数中没有注意到它,fill_na()因为您没有向其传递未定义的变量,因此缺乏解构不会导致任何问题。
如果您想消除这些点,请使用enquos().
myFun <- function(inside_of,\n from_what,\n ...,\n .metadata_defaults = list("Gender" = "Undefined", "Age" = 35),\n .by_maxFormantHz = TRUE,\n .recompute = FALSE,\n .package = "superassp") {\n dotArgs <- rlang::enquos(...)\n return(1)\n}\n\nmyFun(inside_of = ae, from_what = forest, fs = fm, fbw = bw)\n# 1\nRun Code Online (Sandbox Code Playgroud)\n当您\xe2\x80\x99准备好评估时,您可以使用!!!dotArgs内部。dots_list()
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |