Error (invalid argument type) while creating function

dataa<-data.frame(
  aa = c("q","r","y","v","g","y","d","s","n","k","y","d","s","t","n","u","l","h","x","c","q","r","y","v","g","y","d","s","n","k","y","d","s","t","n","u","l","h","x","c"),
  col1=c(1,2,3,2,1,2,3,4,4,4,5,3,4,2,1,2,5,3,2,1,2,4,2,1,3,2,1,2,3,1,2,2,4,4,4,1,2,5,3,5),
  col2=c(2,1,1,7,4,1,2,7,5,7,2,6,2,2,6,3,4,3,2,5,7,5,6,4,4,6,5,6,4,1,7,3,2,7,7,2,3,7,2,4),
  col3= c(2150,3213,2580,4335,2228,3795,2319,2363,2252,3015,2978,2127,3938,3013,3063,4202,4340,4247,3755,4145,3300,3739,3294,2944,4152,2898,2500,3164,2384,2824,3431,2864,3752,2265,3332,3321,3418,3521,2689,2186)
) 

while creating function , i am getting error (invalid argument type)

dataset = dataa
var = "col3"
Name_of_variable = "Average Deductions"
decimal = TRUE
Suff = "%"


numdig <- if (decimal == TRUE) {1} else {0}
  var <- rlang::parse_expr(var)
  
  
  summ_tab1<- dataset %>% filter(!is.na(!!var)) %>%   summarise(
    q25 = format(round(quantile(!! var,  type=6, probs = seq(0, 1, 0.25), na.rm=TRUE)[2],digits = numdig),nsmall = 1),
    Median = format(round(quantile(!! var, type=6, probs = seq(0, 1, 0.25), na.rm=TRUE)[3],digits = numdig),nsmall = 1),
    Average = format(round( mean(!! var, na.rm=TRUE),digits = numdig),nsmall = 1),
    q75 = format(round(quantile(!! var, type=6, probs = seq(0, 1, 0.25), na.rm=TRUE)[4],digits = numdig) ,nsmall = 1),
    N = sum(!is.na(!!var)))

I am getting error Here

but my whole function is below

numdig <- if (decimal == TRUE) {1} else {0}
  var <- rlang::parse_expr(var)
  
  
  summ_tab1<- dataset %>% filter(!is.na(!!var)) %>%   summarise(
    q25 = format(round(quantile(!! var,  type=6, probs = seq(0, 1, 0.25), na.rm=TRUE)[2],digits = numdig),nsmall = 1),
    Median = format(round(quantile(!! var, type=6, probs = seq(0, 1, 0.25), na.rm=TRUE)[3],digits = numdig),nsmall = 1),
    Average = format(round( mean(!! var, na.rm=TRUE),digits = numdig),nsmall = 1),
    q75 = format(round(quantile(!! var, type=6, probs = seq(0, 1, 0.25), na.rm=TRUE)[4],digits = numdig) ,nsmall = 1),
    N = sum(!is.na(!!var)))
  
  
  if(missing(Suff)){ 
    summ_tab<-summ_tab1 %>% 
      mutate("Level"=!!Name_of_variable,
             q25 = mask_p(q25,N),
             Median =mask_me(Median,N),
             Average =mask_m(Average,N),
             q75 = mask_p(q75,N))%>%
      dplyr::rename(
        `25th percentile` = q25,
        `75th percentile` = q75)%>%
      select(Level,N,everything())
    summ_tab
  }
  else{
    summ_tab<-summ_tab1 %>%  mutate("Level"=!!Name_of_variable,
                                    q25 = ifelse(mask_p(q25,N)=="--","--",paste0(mask_p(q25,N),Suff)),
                                    Median =ifelse(mask_me(Median,N)=="--","--",paste0(mask_me(Median,N),Suff)),
                                    Average = ifelse(mask_m(Average,N)=="--","--",paste0(mask_m(Average,N),Suff)),
                                    q75 = ifelse(mask_p(q75,N)=="--","--",paste0(mask_p(q75,N),Suff)))%>%
      dplyr::rename(
        `25th percentile` = q25,
        `75th percentile` = q75)%>% mutate_all(~sub('\\.0*$', '', .)) %>% 
      select(Level,N,everything())
    summ_tab

I can't reproduce your error (I get a could not find function "mask_p" if I try to continue). Even in a function, summ_tab1 is computed correctly.

masking_criteria<-c(3,4,5)
mask_p<-function(x,N){
x= ifelse(N<masking_criteria[3],"--",x)
}
you are not any error getting till sum_tab1

Yes, with your values I get:

>   summ_tab1
     q25 Median Average    q75  N
1 2520.0 3113.5  3150.9 3748.8 40

I am using the same then why i am getting this error ...??
i am trying like this

dataa<-data.frame(
  aa = c("q","r","y","v","g","y","d","s","n","k","y","d","s","t","n","u","l","h","x","c","q","r","y","v","g","y","d","s","n","k","y","d","s","t","n","u","l","h","x","c"),
  col1=c(1,2,3,2,1,2,3,4,4,4,5,3,4,2,1,2,5,3,2,1,2,4,2,1,3,2,1,2,3,1,2,2,4,4,4,1,2,5,3,5),
  col2=c(2,1,1,7,4,1,2,7,5,7,2,6,2,2,6,3,4,3,2,5,7,5,6,4,4,6,5,6,4,1,7,3,2,7,7,2,3,7,2,4),
  col3= c(2150,3213,2580,4335,2228,3795,2319,2363,2252,3015,2978,2127,3938,3013,3063,4202,4340,4247,3755,4145,3300,3739,3294,2944,4152,2898,2500,3164,2384,2824,3431,2864,3752,2265,3332,3321,3418,3521,2689,2186)
)    
        
dataset = dataa
var = "col3"
Name_of_variable = "Average Deductions"
decimal = TRUE
Suff = "%"        
#tab_1d<-function(dataset,var,Name_of_variable,decimal,Suff,acc=1){
  numdig <- if (decimal == TRUE) {1} else {0}
  var <- rlang::parse_expr(var)
  
  
  summ_tab1<- dataset %>% filter(!is.na(!!var)) %>%   summarise(
    q25 = format(round(quantile(!! var,  type=6, probs = seq(0, 1, 0.25), na.rm=TRUE)[2],digits = numdig),nsmall = 1),
    Median = format(round(quantile(!! var, type=6, probs = seq(0, 1, 0.25), na.rm=TRUE)[3],digits = numdig),nsmall = 1),
    Average = format(round( mean(!! var, na.rm=TRUE),digits = numdig),nsmall = 1),
    q75 = format(round(quantile(!! var, type=6, probs = seq(0, 1, 0.25), na.rm=TRUE)[4],digits = numdig) ,nsmall = 1),
    N = sum(!is.na(!!var)))
  
  
  if(missing(Suff)){ 
    summ_tab<-summ_tab1 %>% 
      mutate("Level"=!!Name_of_variable,
             q25 = mask_p(q25,N),
             Median =mask_me(Median,N),
             Average =mask_m(Average,N),
             q75 = mask_p(q75,N))%>%
      dplyr::rename(
        `25th percentile` = q25,
        `75th percentile` = q75)%>%
      select(Level,N,everything())
    summ_tab
  }
  else{
    summ_tab<-summ_tab1 %>%  mutate("Level"=!!Name_of_variable,
                                    q25 = ifelse(mask_p(q25,N)=="--","--",paste0(mask_p(q25,N),Suff)),
                                    Median =ifelse(mask_me(Median,N)=="--","--",paste0(mask_me(Median,N),Suff)),
                                    Average = ifelse(mask_m(Average,N)=="--","--",paste0(mask_m(Average,N),Suff)),
                                    q75 = ifelse(mask_p(q75,N)=="--","--",paste0(mask_p(q75,N),Suff)))%>%
      dplyr::rename(
        `25th percentile` = q25,
        `75th percentile` = q75)%>% mutate_all(~sub('\\.0*$', '', .)) %>% 
      select(Level,N,everything())
    summ_tab
  }

Yes, copy/pasting your code in a fresh session, I just need to add library(tidyverse) and it computes summ_tab1. I have dplyr_1.0.0.

You may want to remove code from that big pipe/summarise until it works, that'll help you pinpoint where the problem appears exactly. Also, does the error message mention the function where the error happens?

it works for me to after calling tidyverse

but while giving decimal = TRUE or decimal = FALSE
in both ways i am getting decimal , but it should not give can you suggest solution....???

Because of format() with nsmall at 1:

> round(1.512345, digits=1)
[1] 1.5
> round(1.512345, digits=0)
[1] 2
> format(round(1.512345, digits=1), nsmall=1)
[1] "1.5"
> format(round(1.512345, digits=0), nsmall=1)
[1] "2.0"

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.