R:如何更改列表元素的属性

R: how to change attributes of list elements

我想将列表中所有项目的 class 从 'table' 更改为 'matrix' 假设表格列表是

a <- letters[1:3]
t <- table(a, sample(a)) 
l <- list(t,t)

我用'lapply'改class

l2 <- lapply(l, function(x) attributes(x)$class = 'matrix')
lapply(l2, class)

但是我尝试过的每个排列都会将 class 更改为 'character'

Akrun 提供的答案是通过将函数括在花括号中并添加分号和 'x' 来扩展函数,即返回原始对象

一个更短/更简洁的替代方法是使用 class<-

lapply(l, `class<-`, value = "matrix")
#> [[1]]
#>    
#> a   a b c
#>   a 1 0 0
#>   b 0 0 1
#>   c 0 1 0
#> 
#> [[2]]
#>    
#> a   a b c
#>   a 1 0 0
#>   b 0 0 1
#>   c 0 1 0

还有一个选项:

lapply(l, function(x) matrix(x, ncol = ncol(x), dimnames = dimnames(x)))

# [[1]]
# 
# a   a b c
# a 0 0 1
# b 0 1 0
# c 1 0 0
# 
# [[2]]
# 
# a   a b c
# a 0 0 1
# b 0 1 0
# c 1 0 0