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

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日

悬赏问题

  • ¥15 stata空间计量LM检验
  • ¥15 NAO机器人说出txt文本内容
  • ¥15 关于k8s node节点被释放后如何驱逐节点并添加新节点
  • ¥15 subprocess.CalledProcessError: Command ‘[‘ninja‘, ‘-v‘]‘ returned non-zero exit status 1
  • ¥15 for循环处理大量数据怎么优化
  • ¥15 笔记本接显卡扩展坞重启报错
  • ¥15 为什么这个指令报错啊,一直弄不懂为什么,想问问该怎么弄,决求解决,ubuntu刚入手
  • ¥15 用百度飞将的paddleyolo库里的yolov7训练自己数据集
  • ¥15 Saber里如何查看磁芯的磁通密度
  • ¥25 关于下拉菜单、数据库、关联选项的问题