Order a table by a set of columns (not general expressions) and limit number of rows in that order.
order_rows(
source,
cols = NULL,
...,
reverse = NULL,
limit = NULL,
env = parent.frame()
)
source to select from.
order by columns ascending.
force later arguments to be bound by name
character, which columns to reverse ordering of to descending.
number limit row count.
environment to look to.
order_by node.
Note: this is a relational operator in that it takes a table that
is a relation (has unique rows) to a table that is still a relation.
However, most relational systems do not preserve row order in storage or between
operations. So without the limit set this is not a useful operator except
as a last step prior to pulling data to an in-memory data.frame
(
which does preserve row order).
if (requireNamespace("DBI", quietly = TRUE) && requireNamespace("RSQLite", quietly = TRUE)) {
my_db <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
d <- rq_copy_to(my_db, 'd',
data.frame(AUC = 0.6, R2 = 0.2))
optree <- order_rows(d, cols = "AUC", reverse = "AUC", limit=4)
cat(format(optree))
sql <- to_sql(optree, my_db)
cat(sql)
print(DBI::dbGetQuery(my_db, sql))
DBI::dbDisconnect(my_db)
}
#> mk_td("d", c(
#> "AUC",
#> "R2")) %.>%
#> order_rows(.,
#> c('AUC'),
#> reverse = c('AUC'),
#> limit = 4)
#> SELECT * FROM (
#> SELECT
#> `AUC`,
#> `R2`
#> FROM
#> `d`
#> ) tsql_58908422269451951133_0000000000 ORDER BY `AUC` DESC LIMIT 4
#> AUC R2
#> 1 0.6 0.2