Is it possible to do a function using the rlang structure with data.table
.
For example:
Without data.table
library(data.table)
library(dplyr)
iris[1,1:2] = NA
iris[3,3:4] = NA
test_dt <- function(dt, col1) {
#dt = data.table(iris)
dt = dt %>%
na.omit(cols = c("Species",{{col1}}))
return(dt)
}
I'm filtering rows with na.omit
with data.table because is faster.
library(data.table)
library(dplyr)
data("iris")
iris[1,1:2] = NA
iris[3,3:4] = NA
dt = as_tibble(iris)
test_tibble <- function(dt, col1) {
#dt = data.table(iris)
dt = as_tibble(iris)
dt = dt %>%
na.omit(cols = c({{col1}}))
return(dt)
}
test_tibble(dt, Sepal.Length) #### It works
test_tibble(dt, "Sepal.Length") #### both works
Using data.table
test_dt <- function(dt, col1) {
dt = data.table(iris)
#dt = as_tibble(iris)
dt = dt %>%
na.omit(cols = c({{col1}}))
return(dt)
}
test_dt(dt, "Sepal.Length") ### It works
test_dt(dt, Sepal.Length) ### Doesn't work
I would like to use the function test_dt()
without ""
. It's possible?
Edit
tb2_2 = structure(list(X = c(0.512025410572104, 1.34199356465929, -1.25270649900694,
-0.733000712714794, 0.45465371837226, -0.127917924970955, 0.31527125548264,
NA, 1.48657524744542, -0.19959359633143),
Y = c(-0.661273939978519, -12.7527853536461, -1.17638144073283, NA, 8.47888404561908,
8.57745418700866, 9.31590763962404, NA, 4.25920544787551, 16.1806108716548),
G = c(1, NA, 1, 1, 0, 1, 0, NA, 1, 1),
U = c(-0.333914863990124, -1.12935646288322, -1.69358562462423, -0.395929701341583,
0.539754714374008, -1.04544664173391, 1.22480232242127, NA, 0.444278569991649,
0.0596820740502588),
T = c(2000, 2001, 2002, 2003, 2004, 2005, 2006, NA, 2008, 2009),
D = c(5.53807382142459, -4.45890044023787, -4.02776194571743, -2.40946010272286,
0.517463695461427, NA, 1.44204693390199, NA, -8.22747683712939, -2.98560166016223),
D0 = c(NA, -11.1320556669676, -3.56453610182438, 4.01976245984647, -5.99808700582389,
9.96620396574901, 5.80036617369695, NA, 12.7934259732021, -9.79730042991476),
CRT1 = c(-9.33852764928105, 29.1198381594211, 0.965478696195844, -23.8140405650042,
-11.9346599938887, -7.18523176736665, 5.4838459604535, NA, -17.3985872962915, NA),
CRT2 = c(`1` = 2.93893603185069, `2` = 1.228446714169, `3` = 6.57588892581666, `4` = 5.50482229342548,
`5` = 3.05717390177606, `6` = 4.25780138105421, `7` = 3.34442855446459, `8` = NA,
`9` = NA, `10` = 4.40551845862642),
TREAT1 = c(`1` = -3.60020997182921, `2` = -13.9812320678151, `3` = -7.75227036654949, `4` = -6.01945591669384,
`5` = 5.42171014384302, `6` = 4.31965280595445, `7` = 5.97147908515944, `8` = NA,
`9` = 3.3287285084747, `10` = 11.7750924130284),
TREAT2 = c(`1` = -36.0020997182921, `2` = -139.812320678151, `3` = -77.5227036654949, `4` = -60.1945591669384,
`5` = 54.2171014384302, `6` = 43.1965280595445, `7` = 59.7147908515944, `8` = NA,
`9` = 33.287285084747, `10` = 117.750924130284),
rand_wei = c(-17.1969296658761, 22.9057780481208, -33.4966252613491, 57.3810802699894, 4.33294142856405,
-12.579733621978, 20.3965087501415, NA, 57.0577414340694,
39.6584493366088)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -10L))
f <- function(data, type, arg1, arg2){
data = data.table(data)
arg1= rlang::as_string(rlang::ensym(arg1))
arg2= rlang::as_string(rlang::ensym(arg2))
if (cmd_type != "a") {
data <- data %>%
na.omit(cols = c("Y", "G", "T", "D", {{arg1}}, {{arg2}}))
} else{
data = data %>%
na.omit(cols = c("Y", "T", "D", "D0", {{arg1}}))
}
data
}
f(tb2_2, type= "a", arg1 = c(CRT1, CRT2), arg2 = TREAT1) #without data.table