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
我想将列表中所有项目的 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