You need to enable JavaScript to run this app. 如何使用tsmp R包为已生成的矩阵轮廓应用自定义注解向量
优惠活动
大模型
产品
解决方案
定价
更多

如何使用tsmp R包为已生成的矩阵轮廓应用自定义注解向量

tsmp应用自定义注解向量的正确操作方法

此前手动修改触发报错的核心原因

tsmp包中compute()返回的矩阵轮廓对象是有严格结构约定的S3类对象,mp字段不是可以随便替换的普通数值向量,必须始终保持二维矩阵的维度属性、列名和关联结构,之前两次操作报错本质都是破坏了这个结构约定:

  • 直接执行result$mp <- my_av_mp时,传入的自定义注解向量是无维度属性的一维数值,后续代码按列位置索引mp值时,因对象不存在列维度,直接抛出undefined columns selected报错。
  • 执行result$mp[,1] <- my_av_mp后,若赋值过程触发R的自动降维逻辑,会把原本二维的mp结构压缩为一维向量,后续find_motif调用apply函数遍历mp列时,因检测不到有效的列维度,触发dim(X) must have a positive length报错。

正确的自定义注解应用流程

前置维度校验

在修改mp值前先确认维度匹配:

  • 运行dim(result$mp)查看原mp对象的行列数
  • 运行length(my_av_mp)确认自定义注解向量的长度和原mp的行数完全匹配;单变量场景下原mp列数为1,多变量场景下列数等于参与计算的变量数,自定义注解的维度需和列数严格对齐

手动修改的结构保留要点

不要直接替换整个mp字段,需严格对齐原有结构属性,避免自动降维:

  1. 先将自定义注解值转为和原mp维度完全一致的矩阵:
    adjusted_mp <- matrix(my_av_mp, nrow = nrow(result$mp), ncol = ncol(result$mp))
  2. 把原mp的所有属性(类标识、列名、维度名称)完整复制到新的调整值上:
    attributes(adjusted_mp) <- attributes(result$mp)
  3. 最后再将调整后的矩阵赋值回原对象的mp字段:
    result$mp <- adjusted_mp

官方兼容的推荐流程

如果你的自定义注解是基于原mp值做加权调整,而非完全替换原mp的计算结果,更推荐参照内置注解函数的逻辑走官方av_apply流程,无需手动处理结构校验:

  • 编写自定义注解生成函数,输入为tsmp返回的mp对象,输出和mp长度完全匹配的调整系数向量(输入输出格式和av_complexity、av_hardlimit_artifact保持一致)
  • 直接将自定义函数传入av_apply完成调整,该函数会自动完成维度校验、结构保留的逻辑,下游的find_motif、find_anomaly等函数可直接正常调用,不会触发结构类报错。

注意:手动修改mp字段时,不要删除原对象中配套的mpi(矩阵轮廓索引)字段,否则同样会触发下游计算报错。


内容的提问来源于stack exchange,提问作者babelproofreader

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 13:06:08