Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用enquo()以dplyr语法编写可管道函数,不返回预期输出_R_Dplyr_Lazy Evaluation_Tidyr - Fatal编程技术网

使用enquo()以dplyr语法编写可管道函数,不返回预期输出

使用enquo()以dplyr语法编写可管道函数,不返回预期输出,r,dplyr,lazy-evaluation,tidyr,R,Dplyr,Lazy Evaluation,Tidyr,我们不能将char\u col对象作为列名分配给mutate。它需要评估。char\u col是一个quosure对象,可以转换为character(quo\u name(char\u col))或symbol,在计算(!!)时,它将分配(:=)正确的列名 iris %>% as.tibble() %>% mutate(Species = str_c(Species, ' species')) %>% select(Species) %>% mut

我们不能将
char\u col
对象作为列名分配给
mutate
。它需要评估。
char\u col
是一个
quosure
对象,可以转换为
character
quo\u name(char\u col)
)或
symbol
,在计算(
!!
)时,它将分配(
:=
)正确的列名

iris %>% 
  as.tibble() %>% 
  mutate(Species = str_c(Species, ' species')) %>% 
  select(Species) %>% 
  mutate(Species = str_remove_all(Species, '[[:punct:]]')) %>% 
  mutate(Species = str_split(Species, ' ')) %>% 
  separate(Species, into = paste0('col', 1:30), fill = 'right') %>% 
  select(-col1) %>% 
  gather(value = word) %>% 
  select(word) %>% 
  remove_empty(c('rows')) %>%
  filter(word != '') %>% 
  mutate(word = str_to_lower(word)) %>% 
  group_by(word) %>% 
  summarize(freq = n()) %>% 
  arrange(desc(freq)) 
字数%
突变(!!char\u colC:=str\u split(!!char\u col,))%>%
分离(char_colC,into=paste0('col',1:30),fill='right')%>%
选择(-col1)%>%
聚集(值=字)%>%
选择(单词)%%>%
删除空(c('行'))%>%
过滤器(字!='')%>%
变异(word=str_到较低的(word))%>%
分组依据(字)%>%
汇总(freq=n())%>%
排列(描述(频率))
}
出局2%
as.tible()%>%
突变(物种=str_c(物种,'物种'))%>%
字数(种类)
-在不使用函数的情况下检查输出

 word_count <- function(data, char_col) {
  char_col <- enquo(char_col)
  char_colC <- quo_name(char_col)

  data %>% 
    select(!!char_col) %>% 
    mutate(!!char_colC := str_remove_all(!!char_col, '[[:punct:]]')) %>% 
    mutate(!!char_colC := str_split(!!char_col, ' ')) %>% 
    separate(char_colC, into = paste0('col', 1:30), fill = 'right') %>%
    select(-col1) %>% 
    gather(value = word) %>% 
    select(word) %>% 
    remove_empty(c('rows')) %>%
    filter(word != '') %>% 
    mutate(word = str_to_lower(word)) %>% 
    group_by(word) %>% 
    summarize(freq = n()) %>% 
    arrange(desc(freq))
}

out2 <- iris %>%
           as.tibble() %>%
           mutate(Species =str_c(Species, ' species')) %>%
           word_count(Species)
out1%
as.tible()%>%
突变(物种=str_c(物种,'物种'))%>%
选择(物种)%>%
突变(物种=str_移除所有物种,[:punct:]'))%>%
突变(物种=str_分裂(物种,)%%
分离(物种,进入=0('col',1:30),填充='right')%>%
选择(-col1)%>%
聚集(值=字)%>%
选择(单词)%%>%
删除空(c('行'))%>%
过滤器(字!='')%>%
变异(word=str_到较低的(word))%>%
分组依据(字)%>%
汇总(freq=n())%>%
排列(描述(频率))
相同(out1、out2)
#[1] 真的

请添加
库(看门人)
当我在remove\u empty(,c(“行”)中发现
错误时:找不到函数“remove\u empty”
就可以了,忘记了那个函数。谢谢谢谢一个半相关的问题。如何编写检查数据$char\u col是否为字符向量的错误消息?@ChristopherPerata您可以使用
summary\u if/mutate\u if
检查要更改的列是否为字符向量。如果您想得到一些错误消息,那么您可以检查
可能
我在函数中添加了'select_If(is.character)%%>%',然后将其包装在可能()中。谢谢
 word_count <- function(data, char_col) {
  char_col <- enquo(char_col)
  char_colC <- quo_name(char_col)

  data %>% 
    select(!!char_col) %>% 
    mutate(!!char_colC := str_remove_all(!!char_col, '[[:punct:]]')) %>% 
    mutate(!!char_colC := str_split(!!char_col, ' ')) %>% 
    separate(char_colC, into = paste0('col', 1:30), fill = 'right') %>%
    select(-col1) %>% 
    gather(value = word) %>% 
    select(word) %>% 
    remove_empty(c('rows')) %>%
    filter(word != '') %>% 
    mutate(word = str_to_lower(word)) %>% 
    group_by(word) %>% 
    summarize(freq = n()) %>% 
    arrange(desc(freq))
}

out2 <- iris %>%
           as.tibble() %>%
           mutate(Species =str_c(Species, ' species')) %>%
           word_count(Species)
out1 <- iris %>% 
          as.tibble() %>% 
          mutate(Species = str_c(Species, ' species')) %>% 
          select(Species) %>% 
          mutate(Species = str_remove_all(Species, '[[:punct:]]')) %>% 
          mutate(Species = str_split(Species, ' ')) %>% 
          separate(Species, into = paste0('col', 1:30), fill = 'right') %>% 
          select(-col1) %>% 
          gather(value = word) %>% 
          select(word) %>% 
          remove_empty(c('rows')) %>%
          filter(word != '') %>% 
          mutate(word = str_to_lower(word)) %>% 
          group_by(word) %>% 
          summarize(freq = n()) %>% 
          arrange(desc(freq)) 


identical(out1, out2)
#[1] TRUE