簡體   English   中英

R語言:lapply中帶有函數參數的意外行為

[英]R language: Unexpected behaviour with function arguments in lapply

我試圖創建一個包含iid Normal數字的矩陣列表。 為了一個簡單的例子,讓矩陣為4乘2並考慮長度為3的列表。下面的代碼似乎應該可以工作(對我來說):

MyMatrix <- lapply(1:3, function() {matrix(rnorm(8), 4, 2)})

但它失敗了,出現以下錯誤:

Error in FUN(1:3[[1L]], ...) : unused argument (1:3[[1]])

一時興起,我試過:

MyMatrix <- lapply(1:3, function(x) {matrix(rnorm(8), 4, 2)})

它奏效了! 但為什么? x不在函數的任何地方使用,並且在實驗中,表達式的行為不受x是否已存在於工作空間中的影響。 這看起來完全是多余的。

我是R的新手,所以如果有經驗的用戶可以解釋這里發生了什么以及為什么我的第一行失敗,我將非常感激。

你不能擁有一個不接受參數然后傳遞參數的函數。 當你運行lapply ,這正是你正在做的事情,因為每個值依次作為函數的第一個參數傳遞。 例如

out <- lapply(1:3, function(x) x)
str(out)
#List of 3
# $ : int 1
# $ : int 2
# $ : int 3

拋出錯誤的簡單示例:

test <- function() {"woot"}
test()
#[1] "woot"
test(1) 
#Error in test(1) : unused argument (1)
lapply(1:3, test)
#Error in FUN(1:3[[1L]], ...) : unused argument (1:3[[1]])

R是錯誤輸出的好形式,因為它可能意味着你期望函數的返回結果根據傳遞給函數的參數而改變。 它不會。 基本R中包含這樣的函數,比如Sys.time() ,如果你嘗試傳遞它可能有意義的多余參數,它們將會失敗:

Sys.time()
#[1] "2014-07-07 13:22:11 EST"
Sys.time(tz="UTC")
#Error in Sys.time(tz = "UTC") : unused argument (tz = "UTC")

暫無
暫無

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

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