r - 为什么 R 在以下示例中将列表视为矩阵?
问题描述
为什么此代码返回 class == 'matrix'?
l = lapply(1:25, function(x)x)
attr(l,"dim") = c(5,5)
class(l)
然后以下代码崩溃:
image(l)
解决方案
根据?attr
attr(x, which) <- 值
which - 一个非空字符串,指定要访问的属性。
所以我们需要
attr(l, 'dim') <- c(5, 5)
其他选项包括
m1 <- matrix(l, 5, 5)
或分配给dim
dim(l) <- c(5, 5)
class(m1)
#[1] "matrix"
str(m1)
#List of 25
# $ : int 1
# $ : int 2
# $ : int 3
# $ : int 4
# ...
identical(m1, l)
#[1] TRUE
关于matrix
withlist
元素,l
是一个list
向量 with length
。为了提取元素,我们需要[[
. 在这里,我们直接将一个dim
属性添加到 'l' 以将其强制转换为matrix
1的matrix
每个元素。matrix
具有将其与 . 分开的行/列list
属性。通过分配它,我们正在更改with属性以使其成为length
matrix
vector
list
row/column
matrix
实际上,list
结构不会因添加dim
ENSION而丢失。如果我们需要将 a 更改为list
a vector
,然后执行or调用unlist
vector
dim
matrix
matrix(unlist(l), 5, 5)
推荐阅读
- html - 如何添加 Powered by: 在横幅广告上?
- json - Flutter JSON String/Int 命令
- c - printf 打印错误的特殊字符
- java - 如何将文件分成几部分并分配它(多字部分)?
- google-cloud-speech - Google Speech to text 的超时问题
- java - Java 10 上的 Groovy 3(模块信息)
- javascript - ThreeJS OBJLoader + MTLLoader - 模型出现黑色
- windows - 基本窗口创建
- ios - swift,Xcode中视觉识别的语言变化
- python - 检查列表时出错