基于序列函数强化学习的矩阵行选择函数报错求助
解决R中"$ operator is invalid for atomic vectors"错误并实现单元格列提取功能
原代码问题分析
- 运算符错误:
environment_mat是矩阵类型,$运算符仅适用于数据框或列表,直接用environment_mat$cellnum会触发"$ operator is invalid for atomic vectors"错误。 - 未定义对象:函数中引用的
environment对象未定义,应为environment_mat。 - 逻辑偏差:原代码的索引逻辑未匹配你需求中"输入单元格编号,输出同列所有位置"的规则(对应示例输入8输出4 9 14 19 24)。
修正后的完整代码
# 定义状态与动作集合 states <- 1:5 actions <- 1:5 # 创建按行排列的25单元格矩阵(匹配示例中的编号逻辑:行1为1-5,行2为6-10,以此类推) environment_mat <- matrix(1:(length(states)*length(actions)), nrow = length(states), ncol = length(actions), byrow = TRUE) # 保留原奖励矩阵 rewards_mat <- matrix(data = c(-100,10,50,16,32,40,-100,80,41,7,50,1,-100, 85,2,16,98,4,-100,8,32,45,95,78,-100), nrow = 5) # 实现需求的函数 nextCells <- function(curCell) { # 获取目标单元格的行列索引 cell_pos <- which(environment_mat == curCell, arr.ind = TRUE) # 提取对应列的所有单元格编号并返回 environment_mat[, cell_pos[["col"]]] } # 测试示例 nextCells(8) # 输出结果:4 9 14 19 24 nextCells(24) # 输出结果:5 10 15 20 25
代码逻辑说明
- 用
byrow=TRUE参数创建矩阵,确保单元格编号按行顺序排列,与你示例中的编号规则一致。 which(..., arr.ind=TRUE)精准定位目标单元格的行列位置,避免矩阵使用$运算符的错误。- 直接提取目标列的所有元素,简洁实现输入一个单元格编号、输出同列所有位置的需求。
内容的提问来源于stack exchange,提问作者Radu Ionescu
相关产品推荐
相关产品推荐

