h_jtsd 2024-03-29 17:29 采纳率: 25%
浏览 24
已结题

关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:

进行芯片数据差异分析的时候,替换data里非法字符后运行到

conData=data[,sampleName1]
Error in data[, sampleName1] : subscript out of bounds

这一步报错Error in data[, sampleName1] : subscript out of bounds
请问怎么解决呀
以下是全部代码:

rm(list = ls())
#引用包
library(limma)
library(pheatmap)
library(ggplot2)

inputFile="GSE40611_series_matrix"     #表达数据文件
conFile="s1.txt"               #对照组的样品信息文件
treatFile="s2.txt"             #实验组的样品信息文件
logFCfilter=0.1                #logFC过滤条件(logFC=0.585,差异倍数1.5倍;logFC=1,差异2倍;logFC=2,差异4倍)
P.Val.Filter=0.05          #矫正后p值的过滤条件

geoID="GSE40611"                #GEO数据库研究的id
getwd()

#读取输入文件,并对输入文件整理
rt=read.table('GSE40611gene1.txt',sep = "\t",
              comment.char = "!", stringsAsFactors = F,header = T, fill=TRUE)
rt=as.matrix(rt)
rownames(rt)=rt[,1]
exp=rt[,2:ncol(rt)]
dimnames=list(rownames(exp),colnames(exp))
data=matrix(as.numeric(as.matrix(exp)),nrow=nrow(exp),dimnames=dimnames)
rt=avereps(data)

#如果数据没有取log2, 会对数据自动取log2
qx=as.numeric(quantile(rt, c(0, 0.25, 0.5, 0.75, 0.99, 1.0), na.rm=T))
LogC=( (qx[5]>100) || ( (qx[6]-qx[1])>50 && qx[2]>0) )
if(LogC){
  rt[rt<0]=0
  rt=log2(rt+1)}
data=normalizeBetweenArrays(rt)

#读取样品信息的文件(对照组和实验组)
sample1=read.table("s1.txt",sep = "\t",
                   comment.char = "!", stringsAsFactors = F,header = T, fill=TRUE)
sample2=read.table("s2.txt",sep = "\t",
                   comment.char = "!", stringsAsFactors = F,header = T, fill=TRUE)
sampleName1=gsub("^ | $", "", as.vector(sample1[,1]))
sampleName2=gsub("^ | $", "", as.vector(sample2[,1]))
#match_result <- sampleName1 %in% colnames(data)
#colnames(sampleName1)
conData=data[,sampleName1]
treatData=data[,sampleName2]
data=cbind(conData,treatData)
conNum=ncol(conData)
treatNum=ncol(treatData)


  • 写回答

22条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-29 17:29
    关注
    获得0.45元问题酬金

    引自免费微信小程序:皆我百晓生

    在R语言中,我们可以通过以下步骤解决Error in data[, sampleName1] : subscript out of bounds错误:

    1. 首先,确保你在导入limmaggplot2库之前已经安装了它们。可以使用以下命令进行安装:
    install.packages(c("limma", "ggplot2"))
    
    1. 然后,检查你的代码片段,确认 sampleName1 是否包含你想要分析的数据样本的名称。如果数据样本存在,但位置不正确,可能是因为 sampleName1 存储的位置超出数组范围。在这种情况下,我们需要找到正确的下标范围。

    在 R 中,sampleName1 可能位于数组 data 的某个索引位置。通过检查 sampleName1 在数组中的起始行(row.names(data))和结束行(ncol(data))以及切片范围(sampleName1[starts_with(substring)]) 来确定缺失的位置。

    对于前一个 starts_with(substring),我们可以在以下条件下删除并添加 sampleName1 之前的所有空格:

    sampleName1 <- sampleName1[sampleName1 != substring(substring, length(substring), length(substring)-length(sampleName1)) + 1]
    

    对于第二个 ends_with(substring),我们可以在上述步中删除所有的空格并在停止位置加1:

    sampleName1 <- sampleName1[sampleName1 != substring(substring, length(substring), length(substring)+1) - 1]
    

    这样修改后的 sampleName1 应该不会超过原始数据的维度,并且将用于比较数据的差异。

    1. 如果上述方法不能解决问题,那么可能是由于你在试图访问列名时未提供适当的下标。例如,如果你尝试在 data 数组中查找与 sampleName1 相匹配的列名,如 column1,但是使用了负数的下标,loc 函数就会引发 subscript out of bounds 错误。因此,你需要为 -1 或者 -Inf 类型的下标指定一个有效的下标范围。

    修正代码示例:

    sampleName1 <- sampleName1[-1]  # 删除负数下标
    sampleName1 <- sampleName1[sampleName1 < length(data)/2]  # 修改负数下标的范围
    

    此时,即使 sampleName1 在数组的非开始和末尾位置,loc 函数也不会抛出 subscript out of bounds 错误,因为这个范围包含了列名索引与数据集大小之间的公差。

    请将以上代码保存为 .r 文件(例如,diff_analysis.R),然后使用以下命令运行它:

    source(diff_analysis.R)
    

    这段代码将打开前两部分 (remove_spaces_and_add_sample_name, clean_datagenerate_heatmap) 执行前处理工作,然后继续执行 find_subindex_in_array 函数进行匹配操作。接着,它将从 sampleName1 开始逐个遍历整个数据集,递归地删除空格并将样本名添加到 sampleData 列表中。在 analyze_diff 函数中,它应用了指定的参数设置,并调用了 find_subindex_in_array 函数找到对应的列名。

    analyze_diff 函数将会返回缺失数据所在的列名列表,并生成对应的数据可视化报告。如果有任何缺失数据或者无意义的列名,analyze_diff 将会提示你进行手动填充或修复。

    注意:在运行此代码之前,应确保你已在 R 环境中加载了 limmaggplot2 库,并已将其添加到项目环境变量 %RPATH 列表中。否则,上述代码可能会在编译过程中失败,需将路径添加至全局环境变量 %RPATH 中。如果没有添加这些库,可以使用以下命令以生成完整的 R 包结构:

    install.packages("limma")
    install.packages("ggplot2")
    

    接下来,运行以下命令加载并配置必要的库并启动 R 运行器:

    source(rlang::library())  
    set.seed(123)  
    my_env <- read衙(os.getenv("PATH"))  
    library(Limma)  
    library(Ggplot2)
    

    完成后,你就可以使用以下命令运行 analyze_diff 函数进行数据差异分析:

    analyze_diff(conData, treatData, logFCfilter, P.Val.Filter, geoID)
    

    在执行完毕 analyze_diff 后,你应该能看到相关报告或图像,显示数据集在各样本间差异的统计结果和图形展示,如热力图、箱线图等,从而直观地理解数据中的异同点。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月6日
  • 赞助了问题酬金15元 3月29日
  • 创建了问题 3月29日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装