R: Error in Usemethod("Tbl_Vars")

How to merge dataframes ? Error in UseMethod(tbl_vars) : no applicable method for 'tbl_vars' applied to an object of class list

There seems to be a problem with your reading function.

The output is not a common dataframe object, but rather some sort of list containing only a dataframe object.

Indeed, this line seems to work and give a proper merged dataframe:

full_join(corpusVars$corpusVars, factivadf$factivadf, by = "doc_id")

Of note, as Chris said, .internal.selfref = <pointer: 0x0000024403b11ef0> should not be included and I had to remove it from your dput output for the example to work. This indeed seems to be related to fread:
Warning: 'Invalid .internal.selfref detected' when adding a column to a data.table returned from a function

R code: no applicable method for 'tbl_vars' applied to an object of class character

This is more of a demonstration than an answer, but there is nothing wrong with the code in the question; it should not cause the reported error in the latest versions of R and dplyr.

library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union

df_cor <- mtcars %>% mutate_if(is.character, as.factor)
df_cor <- df_cor %>% mutate_if(is.factor, as.numeric)
df_cor
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
#> Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
#> Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
#> Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
#> Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
#> Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
#> Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
#> Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
#> Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
#> Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
#> Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
#> Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
#> Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
#> Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
#> Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
#> Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
#> Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
#> Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
#> Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
#> Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
#> Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
#> Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
#> AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
#> Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
#> Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
#> Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
#> Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
#> Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
#> Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
#> Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
#> Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
#> Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2

Created on 2022-03-21 by the reprex package (v2.0.1)

how to fix no applicable method for 'tbl_vars' applied to an object of class NULL error in Shiny

A simple fix before the infile statement would solve

 req(input$xlsxfile)

-server

server <- function(input, output) {

# File handler ----
mydata <- reactive({
req(input$xlsxfile)
inFile <- input$xlsxfile



req(input$xlsxfile,
file.exists(input$xlsxfile$datapath))

openxlsx::read.xlsx(xlsxFile = inFile$datapath,
sheet = 1 ,
detectDates = TRUE,
sep.names = "_")

})

# Dynamically generate UI input when data is uploaded, only sow numeric columns ----
output$checkbox <- renderUI({
selectInput(inputId = "select_var",
label = "Select variables",
choices = c("", names(mydata() %>%
dplyr::select_if(is.numeric))),
selected = NULL,
multiple = FALSE)
})

# Select columns to print ----
df_sel <- reactive({
req(input$select_var)
df_sel <- mydata() %>%
dplyr::select(input$select_var, date)
})


# Same as above but for global.R variable ----
output$checkbox_2 <- renderUI({
selectInput(inputId = "select_var_2",
label = "Select variables",
choices = c("", names(local_iris %>%
dplyr::select_if(is.numeric))),
selected = NULL,
multiple = FALSE)
})


df_sel_global <- reactive({

req(input$select_var_2)

df_sel_global <- local_iris %>%
dplyr::select(input$select_var_2, Date)
})


# Join the dataframes together based on a key ----
joined_dfs <- reactive({

df_joi <- dplyr::inner_join(df_sel(), df_sel_global(), by= c("date" = "Date")) %>%
dplyr::select(input$select_var,input$select_var_2)

})


# Render data frame ----

output$contents <- DT::renderDT(server = FALSE, {

DT::datatable(
if(input$disp == "head") {
head(joined_dfs())
}
else {
joined_dfs()
}, filter = 'top',
extensions = c('Buttons'),
options = list(scrollY = 600,
scrollX = TRUE,
pageLength = 20,
dom = '<"float-left"l><"float-right"f>rt<"row"<"col-sm-4"B><"col-sm-4"i><"col-sm-4"p>>',
lengthMenu= list(c(20, 40, 60, -1),
c('20', '40', '60','All')),
scrollCollapse= TRUE,
lengthChange = TRUE,
widthChange= TRUE,
rownames = TRUE)
)

})

}

-testing

Sample Image

x no applicable method for 'tbl_vars' applied to an object of class c('double', 'numeric')

The issue is with count used inside the summarise. It would be n() instead of count

library(dplyr)
df %>%
group_by(manager_id) %>%
summarise(number_dr = n(), .groups = 'drop')

There is no need to select after the group by summarise step as the columns remaining are only 'manager_id' and 'number_dr'


count expects a data.frame or tibble

df %>%
count(manager_id)

Getting an error in using foreach in R - no applicable method for 'filter' applied to an object of class list

You need to be careful of operator precedence here. Enclose your loop body here in braces to be clear

res <- foreach(ID = 1:10) %do%
{ tbl %>% filter(id == ID) }

Otherwise you are running

res <- (foreach(ID = 1:10) %do% tbl) %>% 
filter(id == ID)

which isn't what you seem to want in this case.



Related Topics



Leave a reply



Submit