错误:`mutate()`输入`编码`问题。x没有适用于“字符”类对象的“选择”方法

德申

我机智。我试图在我的管道中做一个相当简单的突变,但是对于一个特定的例子,R只是拒绝工作。很抱歉,但我无法提供可复制的示例(由于下面提到的原因)。

所以这是我的全部管道:

new <- old %>%
  left_join(., lookup, by = "id") %>%
  mutate(sum_0.95   = apply(across(starts_with("pred")), 1, function(x) {sum(x >= 0.95 & x < 1)}),
         sum_le_0.5 = apply(across(starts_with("pred")), 1, function(x) {sum(x <= 0.5 & x > 0)}),
         coding = case_when(pred_QC4A_code_10 == 0 | pred_QC4A_code_10 == 1 ~ "ABC",
                            sum_0.95 > 0 & (sum_0.95 + sum_le_0.5 == (lookup %>% select(starts_with("pred")) %>% names() %>% length())) ~ "DEF",
                            TRUE ~ "XYZ")) %>%
  select(-starts_with("pred"), -sum_0.95, -sum_le_0.5)

这会给出错误消息(由于lookup %>% select(starts_with("pred")) %>% names() %>% length()case_when中部分)。

# Error: Problem with `mutate()` input `coding`.
# x no applicable method for 'select' applied to an object of class "character"

问题是:

  • 完全相同的结构/代码示例适用于不同的数据集
  • 如果我仅用数字结果替换有问题的部分(29),它就可以工作
  • 如果我替换为lookup具有相同结构的其他数据集,它将起作用
  • 如果我这样做test <- lookup并通过管道中的测试替换查找,则可以正常工作
  • 如果我做的话test <- dput(lookup),和上面一样,就可以

的检查identical(test, lookup)也将返回TRUE

这也是我无法为您提供有效示例的原因。因为无论我做什么(例如dput),该错误都无法重现。

至少是str(lookup)结果

'data.frame':   5625 obs. of  30 variables:
 $ id                 : chr  "A" "B" "C" "D" ...
 $ pred_QC4A_code_10  : num  1 0 0 1 1 1 1 0 1 1 ...
 $ pred_QC4A_code_11  : num  0 0 0 0 0 0 0 0 0 1 ...
 $ pred_QC4A_code_12  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_13  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_14  : num  0 0 0 0 0 0 0 1 0 0 ...
 $ pred_QC4A_code_15  : num  0 0 1 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_16  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_17  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_20  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_21  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_22  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_23  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_30  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_31  : num  0 1 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_32  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_33  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_34  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_40  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_41  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_42  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_43  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_44  : num  0 0 0 0 1 0 0 0 0 0 ...
 $ pred_QC4A_code_80  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_995 : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_996 : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_997 : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_998 : num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_9991: num  0 0 0 0 0 0 0 0 0 0 ...
 $ pred_QC4A_code_9992: num  0 0 0 0 0 0 0 0 0 0 ...

我认为这确实与select命令有关,但不知道发生了什么。


更新:解决了问题。问题是,在我的new数据框中,我还有一个名为的列lookup,因此case_when在访问此列而不是外部数据集时当然不起作用。

阿克伦

最好在外部创建对象,因为它是固定的

v1 <- lookup %>%
        select(starts_with("pred")) %>% 
        names() %>% 
        length()

然后,我们可以简化它

...
 coding = case_when(pred_QC4A_code_10 == 0 | pred_QC4A_code_10 == 1 ~ "ABC",
                        sum_0.95 > 0 & ((sum_0.95 + sum_le_0.5) == (v1))) ~ "DEF",
                        TRUE ~ "XYZ")) 

OP提到数据集中有一个名为“ lookup”的列。因此,如果我们需要使用全局环境中的对象而不是列,请转义(!!

 new <- old %>%
  left_join(., lookup, by = "id") %>%
  mutate(sum_0.95   = apply(across(starts_with("pred")), 1, function(x) {sum(x >= 0.95 & x < 1)}),
         sum_le_0.5 = apply(across(starts_with("pred")), 1, function(x) {sum(x <= 0.5 & x > 0)}),
         coding = case_when(pred_QC4A_code_10 == 0 | pred_QC4A_code_10 == 1 ~ "ABC",
                            sum_0.95 > 0 & (sum_0.95 + sum_le_0.5 == (!!lookup %>% select(starts_with("pred")) %>% names() %>% length())) ~ "DEF",
                            TRUE ~ "XYZ")) %>%
  select(-starts_with("pred"), -sum_0.95, -sum_le_0.5)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

错误没有适用于“ select_”的适用于“字符”类对象的方法

错误没有适用于“ ggplot_build”的适用于“网格”类对象的方法

mutate函数中的错误消息:没有适用于'mutate_'的适用方法应用于类“ c('double','numeric')”的对象

没有适用于“mutate_”的方法应用于“逻辑”类的对象

没有适用于“ separate_”的适用方法应用于“字符”类的对象

UseMethod("SK") 中的错误:没有适用于“SK”的方法应用于“字符”类的对象

没有适用于'mutate_'的适用方法应用于类“ c('integer','numeric')”的对象

UseMethod(“ compute”)中的错误:没有适用于适用于“ nn”类对象的“ compute”适用方法

ggsave():UseMethod(“ grid.draw”)中的错误:没有适用于“ grid.draw”的适用于“字符”类对象的方法

使用dplyr :: distinct()时出现R错误的问题:“没有适用于'distinct_'的适用方法应用于类“ c('double','numeric')的对象””

R中的错误:没有适用于“ st_centroid”的适用方法应用于“ NULL”类的对象

团结返回错误“没有适用于'unite_'的适用方法”应用于类“ c('double','numeric')”的对象

UseMethod(“ escape”)中的错误:没有适用于'escape'的适用方法应用于类的对象

UseMethod(“ group_by_”)中的错误:没有适用于'group_by_'的适用方法应用于类“ list”的对象

x没有适用于“ tbl_vars”的适用方法应用于类“ c('double','numeric')”的对象

UseMethod("predict") 中的错误:没有适用于应用于类 "c('double', 'numeric') 的对象的 'predict' 的方法

R 函数错误,“没有适用于“预测”的方法应用于类“NULL”的对象

UseMethod("filter_") 中的错误:没有适用于“filter_”的方法应用于类“function”的对象

没有适用于“ anti_join”的适用方法应用于“ factor”类的对象

UseMethod(“ predict”):没有适用于“预测”的适用方法应用于“ train”类的对象

ggplotly没有适用于'plotly_build'的适用方法,适用于“ NULL”类的if语句对象

使用“TermDocumentMatrix”时,没有适用于“meta”的方法应用于“character”类的对象

如何在管道中使用xml_find_first?(没有适用于“ xml_find_first”的适用方法应用于“字符”类的对象)

如何合并数据框?UseMethod(“ tbl_vars”)中的错误:没有适用于“ tbl_vars”的适用方法应用于“列表”类的对象

R 闪亮。没有适用于 'mutate' 的方法应用于类 "c('reactiveExpr', 'reactive', 'function')"

R:replace_na(df$col, '') 返回'没有适用于'replace_na' 的方法应用于类“字符”的对象'

UseMethod("html_table") 中的错误:没有适用于“html_table”的方法应用于“xml_missing”类的对象

UseMethod("required_pkgs") 中的错误:没有适用于“required_pkgs”的方法应用于“workflow”类的对象

带有左联接的循环给我一个错误“ UseMethod(“ left_join”)”错误:没有适用于“ left_join”的适用方法应用于类“ list”的对象”