AirFreeeezing 2023-04-02 20:53 采纳率: 33.3%
浏览 82
已结题

R语言绘制火山图对数据使用case when函数报错

问题,绘制火山图时使用case when函数报错,读入文件格式如图,代码如下。请问报错原因是什么?是否是因为R语言并非最新版或是数据格式有误,数据仅包含gene name、log2FC、pvalue三列。如果需要补充信息请留意

> library(EnhancedVolcano)
> library(tidyverse)
── Attaching core tidyverse packages ────────────────────────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.1     ✔ readr     2.1.4
✔ forcats   1.0.0     ✔ stringr   1.5.0
✔ lubridate 1.9.2     ✔ tibble    3.2.1
✔ purrr     1.0.1     ✔ tidyr     1.3.0
── Conflicts ──────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package to force all conflicts to become errors
Warning messages:
1: 程辑包‘tidyverse’是用R版本4.2.3 来建造的 
2: 程辑包‘tibble’是用R版本4.2.3 来建造的 
3: 程辑包‘tidyr’是用R版本4.2.3 来建造的 
4: 程辑包‘readr’是用R版本4.2.3 来建造的 
5: 程辑包‘purrr’是用R版本4.2.3 来建造的 
6: 程辑包‘dplyr’是用R版本4.2.3 来建造的 
7: 程辑包‘forcats’是用R版本4.2.3 来建造的 
8: 程辑包‘lubridate’是用R版本4.2.3 来建造的
> df <- read.csv("volcano.csv", header = T,row.names = 1)
>group<-case_when(df$log2FoldChangeC<(-1)&df$pvalue<0.05 ~"#9AAFEF",
+                  df$log2FoldChange>(1)&df$pvalue<0.05 ~"#EDB4B4",
+                  df$pvalue >= 0.05 ~"#b5b5b5",
+                  abs(df$log2FoldChange)<= 1 ~"#b5b5b5")
Error in `case_when()`:
! Can't recycle `..1 (left)` (size 0) to match `..2 (left)` (size 1271).
Run `rlang::last_trace()` to see where the error occurred.


img

img

  • 写回答

6条回答 默认 最新

  • Zyb0627 2023-04-02 22:42
    关注

    引用chatGPT作答,这个错误信息的意思是不能将大小为0的对象“..1(left)”与大小为1271的对象“..2(left)”进行循环使用。很可能是由于您的case_when()函数中的某些条件未正确编写导致的。

    请注意,在您的代码中有一处笔误,即:

    df$log2FoldChangeC<(-1)
    

    应该改为:

    df$log2FoldChange<(-1)
    

    这是一个可能导致错误的原因。如果您的数据框中没有“log2FoldChangeC”列,则这将导致无法找到该列并返回空值,从而导致向量大小为0。

    另一个可能导致错误的原因是条件的逻辑错误。请确保您的条件表达式能够正确地评估所有行,并返回长度为1271的向量。

    您可以尝试使用ifelse()函数来替换case_when()函数,并检查是否存在任何条件逻辑错误。

    group <- ifelse(df$log2FoldChange < -1 & df$pvalue < 0.05, "#9AAFEF",
                     ifelse(df$log2FoldChange > 1 & df$pvalue < 0.05, "#EDB4B4",
                            ifelse(df$pvalue >= 0.05, "#b5b5b5",
                                   ifelse(abs(df$log2FoldChange) <= 1, "#b5b5b5", NA))))
    

    此外,建议您更新R版本以避免出现一些由版本不兼容性引起的问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 4月11日
  • 已采纳回答 4月3日
  • 创建了问题 4月2日

悬赏问题

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