在应用族函数中使用反引号和运算符

Using backticks and operators in apply family functions

我在最近的一个回答中看到了一个内置赋值的 apply family 函数,无法概括它。

lst <- list(a=1, b=2:3)
lst
$a
[1] 1

$b
[1] 2 3

由于长度不等,因此还不能制作成 data.frame。但是通过强制列表的最大长度,它起作用了:

data.frame(lapply(lst, `length<-`, max(lengths(lst))))
   a b
1  1 2
2 NA 3

行得通。但我从未在应用函数中使用过箭头赋值。我试图通过概括来理解它:

lapply(lst, function(x) length(x) <- max(lengths(lst)))
$a
[1] 2

$b
[1] 2

这不是正确的输出。也不是

lapply(lst, function(x) length(x) <- max(lengths(x)))
 Error in lengths(x) : 'x' must be a list 

这将是一个很好理解的有用技术。有没有办法用匿名函数形式表达赋值?

通过使用匿名函数,我们只返回该函数的值,而不返回 'x' 的值。我们必须指定 return(x) 或简单地指定 x.

lapply(lst, function(x) {
                  length(x) <- max(lengths(lst))
                  x})
#$a
#[1]  1 NA

#$b
#[1] 2 3