玩转ChatGPT:R代码Debug一例

news2024/11/25 20:51:56

一、写在前面

今天家里领导发来求助,说是用GPT-3.5写一个 计算mRNA干性指数 的R代码,运行报错。让我用GPT-4帮忙Debug一哈。

搞了半小时,还是有亿点感悟,写段文字记录记录。

二、踩坑过程

(1)先看原始的咒语

咒语:我已经使用synapser包计算得到了每个基因的干性权重标准值(第一列是基因名,第二列是权重值),现在需要计算TCGA中HCC的RNA-seq测序数据(第一行是样本名,第一列是基因名)每个样本的mRNA干性指数。

具体方法如下:

对于每个TCGA HCC测序数据中的样本,提取与基因mRNA干性权重标准值相同的基因的表达谱。通过Spearman相关系数计算每个样本的基因表达谱和基因mRNA干性权重标准值之间的相关性。对于每个样本,将其计算出的干性指数标准化到 [0,1] 的范围内。最后将所有样本的干性指数输出为一个表格。

输出的代码为:

# 基因mRNA干性权重标准值文件的路径

weight_file <- "干性权重.txt"

# TCGA HCC测序数据文件的路径

data_file <- "HTSeq - FPKM-mRNA.merge.txt"

# 导入基因mRNA干性权重标准值

weight <- read.table(weight_file, header = TRUE)

# 导入TCGA HCC测序数据

data <- read.csv(data_file, row.names = 1)

# 提取与基因mRNA干性权重标准值相同的基因的表达谱

common_genes <- intersect(rownames(weight), colnames(data))

X <- data[, common_genes]

# 计算每个样本的mRNA干性指数

scores <- apply(X, 1, function(z) {

  cor(z, weight$Weight, method = "spearman", use = "complete.obs")

})

# 标准化干性指数到 [0,1] 范围内

normalized_scores <- (scores - min(scores)) / (max(scores) - min(scores))

# 构建结果表格

result <- data.frame(sample_name = rownames(X), mRNAsi_score = normalized_scores)

# 打印结果

print(result)}

两个文件的数据格式如下(分别为干性权重.txt以及HTSeq - FPKM-mRNA.merge.txt):

 RStudio运行以后报错如下:

Error in cor(z, weight$Weight, method = "spearman", use = "complete.obs") :要么同时设定'x'和'y',要么只设定矩阵式的'x'

由于我并不会R语言,我甚至不懂她这个算法是干啥的,所以就直接无脑丢给了GPT-4查查原因。

(2)先用GPT-4找错误

写一个咒语:运行代码:{XXX};

出现报错:{Error in cor(z, weight$Weight, method = "spearman", use = "complete.obs") : 要么同时设定'x'和'y',要么只设定矩阵式的'x'};

请问代码有什么错误?

输出如下:

 主要变的是这:

# 提取与基因mRNA干性权重标准值相同的基因的表达谱

common_genes <- intersect(rownames(weight), colnames(data))

X <- data[, common_genes]

# 根据共享基因筛选权重

selected_weight <- weight[rownames(weight) %in% common_genes, ]

# 计算每个样本的mRNA干性指数

scores <- apply(X, 1, function(z) {

  cor(z, weight$Weight, method = "spearman", use = "complete.obs")

})

但是,依旧报错,也是同样的错误。

接着又告诉TA错误,GPT继续改进:

 修改如下:

# 根据共享基因筛选权重,并按照X的行名进行重排序

selected_weight <- weight[rownames(weight) %in% common_genes, ]

selected_weight <- selected_weight[match(rownames(X), rownames(selected_weight)), ]

还是没有用。

我开始怀疑是否是数据格式的问题,可能需要告诉GPT数据格式。

与此同时,家里领导也分享了想法,然后提供了一个修改方案:

# 提取与基因mRNA干性权重标准值相同的基因的表达谱

common_genes <- intersect(rownames(weight), rownames(data))

X <- data[common_genes, ]

w <- weight[common_genes]

但是还是报错。可以看到,其实都觉得是这一步出了问题,所以我打算进一步问GPT。

(3)优化咒语

咒语:运行下面代码:{XXX};

数据的格式为分别为:

weight_file为{Gene_symbol w

TSPAN6 6.85388903246113e-05},

data_file 为{Tags TCGA-GJ-A3OU-01 TCGA-G3-A7M9-01 TCGA-ED-A627-01 TCGA-DD-AACB-01 TCGA-CC-5264-01

RAB4B 3.897881937 2.731438761 2.690751371 2.991402482 1.704487843

};

报错:{XXX},何修改代码?

 改的还是那一段:

# 提取与基因mRNA干性权重标准值相同的基因的表达谱

common_genes <- intersect(rownames(weight), rownames(data))

X <- data[common_genes, ]

# 根据共享基因筛选权重,并按照X的行名进行重排序

w <- weight[rownames(weight) %in% common_genes, ]

w <- w[match(rownames(X), rownames(w)), ]

依旧报错,我继续追问3-4回合,GPT也一直改代码,但是依旧行不通。

做到现在,可以排除数据格式的原因,代码应该也不是很难,但是为何报错呢?

没办法只能一步一步来解析了。

(4)解释整个代码

写一个咒语:请详细解析这个代码的功能,代码:{XXX}。

集中报错都在第二、三步骤,但我觉得GPT不至于连着简单的算法都不会,而且数据格式TA是知道的。

所以我考虑,会不会数据读取就有错误??!!

看了一下Rstudio的数据监视窗口,果然:

 Data都没有数值,当然算不下去!!!

(5)优化数据读取代码

咒语:data_file 为{Tags TCGA-GJ-A3OU-01 TCGA-G3-A7M9-01 TCGA-ED-A627-01 TCGA-DD-AACB-01 TCGA-CC-5264-01

RAB4B 3.897881937 2.731438761 2.690751371 2.991402482 1.704487843

};读取代码为:data <- read.csv(data_file, row.names = 1),但是读取为0列,我需要全部列的信息,如何修改代码?

 运行,数据读出来了:

 但是运行代码,依旧报错。

我有强烈预感,还是数据格式的问题,于是打开数据框,一目了然:

 基因名所在的列都不一致,匹配不了很正常,这个代码我会改:

weight <- read.table(weight_file, header = TRUE, row.names = 1)

这样,数据就对齐了:

 最后再运行代码(当然中间有些代码已经有修改,根据之前追问GPT的那几次),没报错了,至于结果对不对,我也不懂,至少跑通了。

万万没想到,居然是最不起眼的数据读取出问题,看来GPT-4也还是识别不出,一直在修改下面的算法核心部分。

下一步我测试下直接用GPT-4从头生成代码会如何?

(6)GPT-4生成代码

咒语:我已经使用synapser包计算得到了每个基因的干性权重标准值,现在需要计算TCGA中HCC的RNA-seq测序数据每个样本的mRNA干性指数。

具体方法如下:

对于每个TCGA HCC测序数据中的样本,提取与基因mRNA干性权重标准值相同的基因的表达谱。通过Spearman相关系数计算每个样本的基因表达谱和基因mRNA干性权重标准值之间的相关性。对于每个样本,将其计算出的干性指数标准化到 [0,1] 的范围内。最后将所有样本的干性指数输出为一个表格。

其中,干性权重标准值的数据格式为{Gene_symbol w

TSPAN6 6.85388903246113e-05},

TCGA中HCC的RNA-seq测序数据的格式为{Tags TCGA-GJ-A3OU-01 TCGA-G3-A7M9-01 TCGA-ED-A627-01 TCGA-DD-AACB-01 TCGA-CC-5264-01

RAB4B 3.897881937 2.731438761 2.690751371 2.991402482 1.704487843

};请用R语言写出代码。

代码如下:

# 首先,安装和加载必要的包

if (!require("dplyr")) {

  install.packages("dplyr")

}

library(dplyr)

# 读取你的基因干性权重标准值数据

dryness_weights <- read.table("dryness_weights.txt", header = TRUE, sep = "\t")

# 读取你的TCGA HCC RNA-seq数据

rna_seq_data <- read.table("rna_seq_data.txt", header = TRUE, sep = "\t")

# 确保基因在两个数据框中都存在

common_genes <- intersect(dryness_weights$Gene_symbol, rna_seq_data$Tags)

# 提取共同基因的数据

dryness_weights_filtered <- dryness_weights[dryness_weights$Gene_symbol %in% common_genes, ]

rna_seq_data_filtered <- rna_seq_data[rna_seq_data$Tags %in% common_genes, ]

# 计算每个样本的mRNA干性指数

dryness_index <- apply(rna_seq_data_filtered[, -1], 2, function(sample_expr) {

  cor(dryness_weights_filtered$w, sample_expr, method = "spearman")

})

# 标准化干性指数到 [0,1] 的范围内

dryness_index_normalized <- (dryness_index - min(dryness_index)) / (max(dryness_index) - min(dryness_index))

# 输出结果

dryness_index_df <- data.frame(sample_id = names(dryness_index_normalized), dryness_index = dryness_index_normalized)

write.table(dryness_index_df, "dryness_index.txt", sep = "\t", quote = FALSE, row.names = FALSE)

跑出来的结果跟GPT-3.5的比,数量上都是一致的,共有371个数值,具体数值也一致:

 结束!同样的咒语我去试了GPT-3.5确实一次性写不出堪比GPT-4的代码。

三、写在最后

三点启示吧:

(1)在写咒语的时候,涉及到数据的,一定要直接复制你的数据格式给GPT(就直接复制粘贴,GPT能识别表格的分隔符),最好不要直接用文字描述,容易说不清楚;

(2)通过这个事例发现,GPT-4在找bug的时候,还是有些弱点。可能跟TA不能运行代码有关吧。然而,写代码能力还是强于GPT-3.5!

(3)最后,还是得自己理解代码,才能最高效的用GPT辅助Debug,偷懒不得啊!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/647311.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

渗透测试报告怎么写?记得收藏好哦

目录 1、准备好渗透测试记录 2、撰写渗透测试报告书 报告书的撰写建议 1、重点 2、图表重于文字 3、结果与建议 总结&#xff1a; 1、准备好渗透测试记录 测试记录是执行过程的日志&#xff0c;在每日测试工作结束后&#xff0c;应将当日的成果做成记录&#xff0c;虽然…

【Spring学习之更简单的读取和存储Bean对象】属性注入,set注入,构造方法注入

前言&#xff1a; &#x1f49e;&#x1f49e;今天我们依然是学习Spring&#xff0c;这里我们会更加了解Spring的知识&#xff0c;知道Spring是怎么更加简单的读取和存储Bean对象的。也会让大家对Spring更加了解。 &#x1f49f;&#x1f49f;前路漫漫&#xff0c;希望大家坚持…

现在的00后,卷死了呀....

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;三月份春招我们公司来了个00后&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪23K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了…

数据科学之数据可视化——Tableau可视化气泡图

大家好&#xff0c;我是大鹏&#xff0c;今天给大家分享一个新的一个知识“气泡图”。 气泡图就是用气泡的大小和颜色表示不同的数据。

【RabbitMQ教程】第三章 —— RabbitMQ - 发布确认

&#x1f4a7; 【 R a b b i t M Q 教程】第三章—— R a b b i t M Q − 发布确认 \color{#FF1493}{【RabbitMQ教程】第三章 —— RabbitMQ - 发布确认} 【RabbitMQ教程】第三章——RabbitMQ−发布确认&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人…

青大数据结构【2020】【三分析计算】

关键字&#xff1a; 无相连通图、Prim算法最小生成树、哈希函数、线性探测法、平均查找长度 1.对于一个带权连通无向图G&#xff0c;可以采用Prim算法构造出从某个顶点v出发的最小生成树&#xff0c;问该最小生成树是否一定包含从顶点v到其他所有顶点的最短路径。如果回答是&a…

docker 网络理论知识点 - CNM 和命名空间

Network 目录 1 network namespace1.1 动手小实验 2 回到 docker2.1 driver and docker02.2 network2.3 网桥 docker0 3 总结 1 network namespace 1.1 动手小实验 网络命名空间。linux kernel 提供的网络虚拟化的功能。创建多个隔离的网络空间。每个空间内 firewall, ether …

Matplotlib学习

文章目录 Matplotlib曲线图的绘制饼图的绘制直方图的绘制散点图的绘制 Matplotlib 在深度学习的实验中&#xff0c;图形的绘制和数据的可视化非常重要。Matplotlib是用于绘制图形的库&#xff0c;使用Matplotlib可以轻松地绘制图形和实现数据的可视化。这里&#xff0c;我们来…

Linux学习之文件信息和文件类型

使用ls -l可以看到当前目录下除隐藏文件之外的文件。 我们拿下边这行信息解释一下&#xff1a; -rw-r--r-- 1 root root 10562254 Mar 9 00:08 cmake-3.25.3.tar.gz Linux中“一切皆文件”&#xff0c;首先需要明确这点&#xff0c;因为对于不同的文件类型&#xff0c;后边的…

前后端分离项目之修改存储信息

本文章基于&#xff1a;前后端分离项目之登录页面(前后端请求、响应和连接数据库)_小俱的一步步的博客-CSDN博客 目录 一、编辑者操作步骤 二、代码实现步骤 以下以存储学生信息为例 一、编辑者操作步骤 1.在前端“编辑”按钮&#xff0c;点击时弹出弹框&#xff0c;出现…

某大厂测试开发面试总结,大家可以参考一下

目录 前言 1、RecyclerView和ListView的区别 2、技术选型的依据 3、原生monkey的原理 4、monkey和monkeyRunner区别 5、appium和uiautomator的关系或者Airtest和uiautomator的区别 6、Android进程间通信方式 7、内存溢出与内存泄露的区别及内存泄漏的原因 8、性能数据收…

mac版Excel表格中出现E+

相信很多人在使用Excel的时候都遇到过单元格变成###的情况&#xff0c;这是由于单元格列宽不够造成的&#xff0c;只需要增加列宽就可以正常显示。如果你在使用Excel的过程中遇到过出现"E"这种情况&#xff0c;此时不要惊慌&#xff0c;这是Excel自动对很大或很小的数…

C语言实现汉诺塔问题【图解和演示】

大家好&#xff0c;我是纪宁。 在高中时&#xff0c;曾有一位故友问过我类似这种移盘子的题目&#xff08;数列&#xff09;&#xff0c;我当时一脸茫然&#xff0c;上了大学才知道原来是著名的汉诺塔问题 本文&#xff0c;就将介绍汉诺问题的由来、原理、及C语言如何实现 目录…

ZooKeeper【实际案例】

服务器动态上下线监听 需求 在我们的分布式系统中&#xff0c;有多台服务器节点&#xff0c;我们希望任意一台客户端都能实时收到服务器节点的上下线。 实现 服务器节点上线以后自动去zookeeper目录注册自己的节点信息&#xff08;创建Znode临时节点&#xff09;&#xff0c…

无人机侦察区域覆盖

irvingvasquez/ocpp: Optimal coverage path planning (github.com) matlab2020可运行

MySQL数据表进阶操作

MySQL数据表高级操作 一、克隆表二、清空表三、创建临时表四、创建外键约束五、MySQL中6种常见的约束&#xff1a;六、数据库用户管理 一、克隆表 将数据表的数据记录生成到新的表中 被克隆的对象&#xff1a; 方法一&#xff1a; 第一步&#xff1a;create table 新表名 li…

2023年简历石沉大海,别投了,软件测试岗位饱和了....

各大互联网公司的接连裁员&#xff0c;政策限制的行业接连消失&#xff0c;让今年的求职雪上加霜&#xff0c;想躺平却没有资本&#xff0c;还有人说软件测试岗位饱和了&#xff0c;对此很多求职者深信不疑&#xff0c;因为投出去的简历回复的越来越少了。 另一面企业招人真的…

机器学习_预测概率校准

我们在建模时通常根据准确性或准确性来评估其预测模型&#xff0c;但几乎不会问自己&#xff1a;“我的模型能够预测实际概率吗&#xff1f;” 但是&#xff0c;从商业的角度来看&#xff0c;准确的概率估计是非常有价值的&#xff08;准确的概率估计有时甚至比好的精度更有价值…

Dao层、Service层、Entity层、Servlet层、Utils层

这几天在复习高数&#xff0c;还有刷题。 B&#xff1a; 第五周任务 [Cloned] - Virtual Judge (vjudge.net) http://t.csdn.cn/S3imr G&#xff1a; 第五周任务 [Cloned] - Virtual Judge (vjudge.net) http://t.csdn.cn/UVgfK Dao层是数据访问层Service层是业务逻辑层…

深度学习HashMap之手撕HashMap

认识哈希表 HashMap其实是数据结构中的哈希表在Java里的实现。 哈希表本质 哈希表也叫散列表&#xff0c;我们先来看看哈希表的定义&#xff1a; 哈希表是根据关键码的值而直接进行访问的数据结构。 简单说来说&#xff0c;哈希表由两个要素构成&#xff1a;桶数组和散列函数…