簡體   English   中英

sapply()如何應用具有未定義(無默認值)參數的函數

[英]How does sapply() apply a function with undefined (with no default) parameters

以下來自chernan的示例REST查詢的代碼塊將FUN應用於參數列表,但未提供“ param_name”。 這怎么可能?

rcurl_request <- function(service_url, parameters) {

# Collapse all parameters into one string
all_parameters <- paste(
    sapply(names(parameters), 
           FUN=function(param_name, parameters) {
               paste(param_name, paste(parameters[[param_name]], collapse=','), collapse='', sep='=')
           }, 
           parameters),
    collapse="&")

# Paste base URL and parameters
requested_url <- paste0(service_url, all_parameters)

# Encode URL (in case there would be any space character for instance)
requested_url <- URLencode(requested_url)

# Start request to service
response <- getURL(requested_url, .opts = list(ssl.verifypeer = FALSE))

return(response)
}

*apply函數系列旨在將FUN應用於提供給相應*apply函數的對象的元素。

在您的示例中,應用FUN的元素是names(parameters)各個元素。 sapply()接受第一個元素, names(parameters)[1] ,並將其作為第一個參數傳遞給FUN 因此, param_name用於引用names(parameters)[1] ,然后引用names(parameters)[2] ,依此類推。

換句話說, sapply()安排將sapply()第一個參數的元素依次傳遞給FUN提供這些元素作為FUN的第一個參數。

您可以通過以下簡單示例更清楚地看到這一點:

sapply(1:10, FUN = function(i) {writeLines(paste("working on", i)); i})

因此, i依次采用值1、2,...,10,並且匿名函數在每個值上起作用:

> sapply(1:10, FUN = function(i) {writeLines(paste("working on", i)); i})
working on 1
working on 2
working on 3
working on 4
working on 5
working on 6
working on 7
working on 8
working on 9
working on 10
 [1]  1  2  3  4  5  6  7  8  9 10

names(parameters)被傳遞給param_name 一個更基本的示例: sapply(df1, mean) 含義是sapply(df1, function(x) mean(x)) 在這種情況下,df1的每個元素都作為參數x傳遞給mean apply函數采用第一個參數,並將其傳遞給指定的函數(apply函數的第二個參數)

例如:

sapply(mtcars, mean)

       mpg        cyl       disp         hp       drat         wt       qsec 
 20.090625   6.187500 230.721875 146.687500   3.596563   3.217250  17.848750 
        vs         am       gear       carb 
  0.437500   0.406250   3.687500   2.812500 

同樣, sapply()構造為sapply(x, FUN,...) ...是傳遞給函數FUN任何其他參數。 在您的示例中, parameters作為第二個參數傳遞( names(parameters)隱式是第一個)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM