R语言报错:维度数量不正确,求myList中矩阵第5列的和
问题解决步骤
首先你当前的核心问题是myList创建错误,导致后续所有索引操作都不对。看你1.1的代码,你是分开执行了c(1:10)、matrix(...)、list(...),但并没有把这三个元素合并成名为myList的列表——你最后给myList赋值的只有c(1:10),后面两行只是单独运行,没存到myList里。
第一步:修正myList的创建
按照作业要求,正确的myList应该是包含三个元素的列表,代码如下:
# 1.1 正确创建符合要求的myList myList <- list( # 第一个元素:1-10的整数向量 num_vec = 1:10, # 第二个元素:1-25按行填充的5行矩阵 num_mat = matrix(1:25, byrow = TRUE, nrow = 5), # 第三个元素:指定元素的子列表 sub_list = list(str = "latte", vec = "taco", "nan", vec = c(1:7)) )
第二步:理解列表与矩阵的索引规则
- 列表的元素要用
[[索引]]或者$元素名取出,取出后才是对应的数据类型(比如矩阵);用[索引]取出的还是一个子列表,不是元素本身。 - 矩阵的索引用
[行,列],如果取整列,行的位置留空即可,比如[,5]就是第5列。
第三步:正确计算ans2(矩阵第5列的和)
有两种符合要求的写法:
写法1:先取矩阵,再取第5列,最后求和
# 先取出myList里的矩阵(第二个元素),再取第5列,然后求和 ans2 <- sum(myList[[2]][,5])
写法2:用colSums计算所有列的和,再取第5列的结果
# 先计算矩阵所有列的和,再提取第5个结果 ans2 <- colSums(myList[[2]])[5]
你之前报错的原因
- 第一个报错
incorrect number of dimensions:你之前的myList只是一维向量,不是包含矩阵的列表,用二维索引[,5]自然会报错维度不匹配;就算myList是正确的列表,myList[,5]也是错误的索引方式——列表不能直接用二维索引,得先取出矩阵元素。 - 第二个报错
argument of length 0:nrow()针对的是矩阵/数据框,你的myList要么是向量(nrow返回NULL),要么是列表(nrow不适用),所以1:nrow(myList)会因为参数为空而报错。
内容的提问来源于stack exchange,提问作者Summers
相关产品推荐
相关产品推荐

