簡體   English   中英

有人可以解釋我這段代碼嗎? 特別是“函數x和[[x]]”的作用?

[英]Can someone please explain me this code? especially the role of "function x and [[x]]"?

這是 R 中的代碼,我無法理解這行代碼中function(x)qdata[[x]]作用。 有人可以一點一點地為我詳細說明嗎? 這段代碼不是我寫的。 謝謝

outs=lapply(names(qdata[,12:35]), function(x) 
        hist(qdata[[x]],data=qdata,main="Histogram of Quality Trait",
             xlab=as.character(x),las=1.5)$out)

此代碼生成一系列直方圖,一個用於數據幀 qdata 的第 12 到 35 列中的每一列。 lapply 函數遍歷列。 在每次迭代中,當前列的名稱作為參數“x”傳遞給“function(x)”定義的匿名函數。 該函數的主體是對 hist() 函數的調用,該函數創建直方圖。 qdata[[x]](其中 x 是列的名稱)從該列中提取數據。 我實際上對“data=qdata”感到困惑。

我們沒有名為qdata的數據對象,因此我們無法確定這段代碼會發生什么。 似乎這段代碼的作者試圖將名為outs的組件的值從函數調用傳遞給hist 如果qdata是一個普通的數據幀,那么我懷疑這段代碼在那個目標上會失敗,因為hist函數沒有out組件。 (看看?hist的輸出。當我用一個簡單的數據幀運行它時,我確實得到了出現在我的交互式繪圖設備中的直方圖,但我得到了outs組件的NULL值。此外,12 個警告是由於缺少hte hist 函數的data參數。

 qdata <- data.frame(a=rnorm(10), b=rnorm(10))
 outs=lapply(names(qdata), function(x) 
         hist(qdata[[x]],data=qdata,main="Histogram of Quality Trait",
              xlab=as.character(x),las=1.5)$out)
#There were 12 warnings (use warnings() to see them)

> str(outs)
List of 2
 $ : NULL
 $ : NULL

所以我覺得我們需要關注一下這段代碼作者的R知識水平。 我可能對這個假設有誤。 hist函數是通用的,並且某些未引用的包可能具有一個函數,旨在處理數據對象並在傳遞具有特定類的向量時重新運行輸出值。 然而,在僅加載基本包的典型啟動情況下,只有三個 hist.* 函數:

methods(hist)
#[1] hist.Date*   hist.default hist.POSIXt*
#see '?methods' for accessing help and source code

關於function[[x]]的作用問題:關鍵字function返回一個語言對象,可以接收參數值,然后進行操作,最后返回結果。 在這種情況下, names被傳遞給匿名函數並依次成為本地名稱x和該值由'[[' - 函數用於在我假設的列中查找列'qdata'-數據幀。

暫無
暫無

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

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