首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将` `spec_tbl_df/tbl_df/tbl/data.frame`对象转换为函数

无法将` `spec_tbl_df/tbl_df/tbl/data.frame`对象转换为函数
EN

Stack Overflow用户
提问于 2019-11-27 00:38:53
回答 1查看 3.8K关注 0票数 1

这个问题可能是关于magrittr的,但我不确定。如果我通过管道将数据(%>%)传递给下一个函数,据我所知,它将转到第一个参数。我有这个示例数据集(df),并希望提取在列col1到col3中包含值101到104的所有行。

代码语言:javascript
复制
# A tibble: 5 x 4
     ID  col1  col2  col3
  <dbl> <dbl> <dbl> <dbl>
     1   101   102   201
     2   201   202   203
     3   104    NA   301
     4   101    NA    NA
     5   201   301   302

我能做这些

代码语言:javascript
复制
library(tidyverse)

df %>% filter(pmap_lgl(select(., starts_with("col")), ~any(c(...) %in% c(101:104))))

但是,当我只想获取布尔向量时,我会得到一个警告

代码语言:javascript
复制
df %>% pmap_lgl(select(., starts_with("col")), ~any(c(...) %in% c(101:104)))
Error: Can't convert a `spec_tbl_df/tbl_df/tbl/data.frame` object to function

我想我可以通过以下方式让它工作

代码语言:javascript
复制
df %>% {pmap_lgl(select(., starts_with("col")), ~any(c(...) %in% c(101:104)))}

据我所知,df通常会传递给pmap的第一个参数,但就像这样,它会去点所在的地方。然而,为什么在第一种情况下这是不必要的。

数据:

代码语言:javascript
复制
df <- structure(list(ID = c(1, 2, 3, 4, 5), col1 = c(101, 201, 104, 
101, 201), col2 = c(102, 202, NA, NA, 301), col3 = c(201, 203, 
301, NA, 302)), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"
), row.names = c(NA, -5L), spec = structure(list(cols = list(
    ID = structure(list(), class = c("collector_double", "collector"
    )), col1 = structure(list(), class = c("collector_double", 
    "collector")), col2 = structure(list(), class = c("collector_double", 
    "collector")), col3 = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
"collector")), skip = 1), class = "col_spec"))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-27 00:47:46

在第一种情况下,dffilter的第一个参数。然后可以使用.访问df

在第二种情况下,df不是pmap_lgl的预期第一个参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59055579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档