r - 如何解决错误:`filter()` 输入 `..1` 的问题与函数之间的错误?
问题描述
我运行的代码正在过滤分组的行,因此每个组只剩下 1 行,除非多行通过我的所有过滤器。这段代码昨天已经运行良好。然而,今天我下载了一些新包(用于分析基因富集),因为使用这些包,我的过滤代码现在给了我一个新错误:
SD1<- df %>%
group_by(group) %>%
filter(if(n() > 1) {(Score > SD) } else TRUE) %>%
slice_max(count1, n = 1) %>%
slice_max(count2, n = 1)
PPI <- df %>%
group_by(group) %>%
dplyr::filter(if(n() > 1) {(Score < SD) } else TRUE) %>%
dplyr::filter(dplyr::between(Score, Average, SD)) %>%
slice_max(count1, n = 1) %>%
slice_max(count2, n = 1) %>%
subset(!(group %in% SD1$group)) %>%
ungroup()
Error: Problem with `filter()` input `..1`.
x `left` must be length 1
i Input `..1` is `dplyr::between(Score, Average, SD)`.
i The error occurred in group 1: group = 1.
我见过类似的问题,但在我的用例中尝试应用他们的答案并没有奏效。
出现这种情况是否有编码原因,或者是我在 RStudio 中安装的新的冲突包时 dplyr 遇到的问题?据我所知,这是我做的唯一不同的事情。
它正在过滤的数据如下所示:
group gene Score Average SD count1 count2
1 gene1 0.1 0.43 0.75 0 1
1 gene2 0.5 0.43 0.75 0 23
1 gene3 0.7 0.43 0.75 1 45
2 gene4 0.88 0.7 0.75
会话信息:
sessionInfo()
R version 4.0.2 (2020-06-22)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363)
Matrix products: default
locale:
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C
[5] LC_TIME=English_United Kingdom.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] forcats_0.5.1 stringr_1.4.0 purrr_0.3.4 readr_1.4.0 tibble_3.0.6
[6] ggplot2_3.3.3 tidyverse_1.3.0 tidyr_1.1.2 dplyr_1.0.3 data.table_1.13.6
loaded via a namespace (and not attached):
[1] Rcpp_1.0.6 pillar_1.4.7 compiler_4.0.2 cellranger_1.1.0 dbplyr_2.0.0
[6] tools_4.0.2 jsonlite_1.7.2 lubridate_1.7.9.2 lifecycle_0.2.0 gtable_0.3.0
[11] pkgconfig_2.0.3 rlang_0.4.10 reprex_1.0.0 cli_2.3.0 rstudioapi_0.13
[16] DBI_1.1.1 haven_2.3.1 withr_2.4.1 xml2_1.3.2 httr_1.4.2
[21] fs_1.5.0 generics_0.1.0 vctrs_0.3.6 hms_1.0.0 grid_4.0.2
[26] tidyselect_1.1.0 glue_1.4.2 R6_2.5.0 readxl_1.3.1 modelr_0.1.8
[31] magrittr_2.0.1 backports_1.2.1 scales_1.1.1 ellipsis_0.3.1 rvest_0.3.6
[36] assertthat_0.2.1 colorspace_2.0-0 stringi_1.5.3 munsell_0.5.0 broom_0.7.4
[41] crayon_1.4.0
解决方案
尽管“UpperSD_Genes”数据集显示 0 行,但它无法从该列中提取值,但错误发生在subset
(在 中tidyverse
,它将与)的最后一步filter
nrow(UpperSD_Genes)
#[1] 0
即它工作正常,直到
df %>%
group_by(group) %>%
dplyr::filter(if(n() > 1) {(RFR_Score < Upper_SD_Threshold) } else TRUE) %>%
dplyr::filter(dplyr::between(RFR_Score, AvgScore_Per_Group, Upper_SD_Threshold)) %>%
slice_max(direct_PPI_count, n = 1) %>%
slice_max(secondary_PPI_count, n = 1)
# A tibble: 1 x 7
# Groups: group [1]
# group gene RFR_Score AvgScore_Per_Group Upper_SD_Threshold direct_PPI_count secondary_PPI_count
# <int> <chr> <dbl> <dbl> <dbl> <int> <int>
#1 1 gene3 0.7 0.43 0.75 1 45
此外,OP 代码中的特定错误与相关left
,其值为right
1。如果有多个元素,则会引发错误。为了规避,我们可以使用between
length
length
first
df %>%
group_by(group) %>%
dplyr::filter(if(n() > 1) {(RFR_Score < Upper_SD_Threshold) } else TRUE) %>%
dplyr::filter(dplyr::between(RFR_Score, first(AvgScore_Per_Group), first(Upper_SD_Threshold)) )
推荐阅读
- c# - 我项目中数据的文件路径不起作用
- javascript - 如何对 FullCalendar JS 进行无休止的营业时间和限制?
- mysql - MySQL 中的查询如何从表中生成一个值及其详细信息的总和
- android - 圆形图像作为项目列表的背景
- python - requests-html 未能获得预期的元素
- c# - 如何在分配动态数据源之前从 C# winform 中的 objectlistview 中删除列
- javascript - __proto__ 与 [[Prototype]] 有何不同?
- outlook - 意外删除 Outlook 的 PST 文件
- javascript - VueJS 同步两个输入字段
- javascript - Fetch 调用在 Postman 中有效,但在 localhost:3000 中无效