有多种方法可以通过使用保存所需列名(with=FALSE、..、mget、 ...)的变量来选择 data.table 的列。
是否就使用哪个(何时)达成共识?一个data.table比其他的多-y 吗?
我可以提出以下论点:
with=FALSE并且..几乎同样快,而mget速度较慢..无法“即时”选择连接的列名(编辑:当前的 CRAN 版本1.12.8绝对可以,我使用的是旧版本,不能,所以这个论点是有缺陷的)mget()接近于的有用语法get(),这似乎是在 j 的计算中使用变量名称的唯一方法至 (1):
library(data.table)
library(microbenchmark)
a <- mtcars
setDT(a)
selected_cols <- names(a)[1:4]
microbenchmark(a[, mget(selected_cols)],
a[, selected_cols, with = FALSE],
a[, ..selected_cols],
a[, .SD, .SDcols = selected_cols])
#Unit: microseconds
# expr min lq mean median uq max neval cld
# a[, mget(selected_cols)] 468.483 495.6455 …Run Code Online (Sandbox Code Playgroud) 我试图validate在R Shiny中使用,以防止在不应该显示输出时显示它们。当reactive在input内部创建验证时使用验证,uiOutput并且验证引发错误时,该错误不会传递给依赖项reactive或output。
阅读https://shiny.rstudio.com/articles/validation.html并使用时reactlog,我认为问题出在生成的内容上,input而不取决于经过验证的反应性。该文章指出:
闪亮的将:将验证错误传递给依赖它的任何反应式表达式或观察者对象
我不确定真正的input内部是uiOutput 什么,但我怀疑它既不是反应性表达也不是观察者。
考虑以下示例:
library(shiny)
library(data.table)
cars <- data.table(mtcars, keep.rownames = T )
setnames(cars, "rn", "name")
ui <- fluidPage(
selectInput("cyl", "Cyl", c(4, 12)),
uiOutput("uiOutCars"),
h4("Filtered Table"),
tableOutput("filteredTable")
)
server <- function(input, output, session) {
availableCars <- reactive({
choices <- cars[cyl == input$cyl, name]
validate(need(try(length(choices) > 0),
"No cars with this cyl!"))
choices
}) …Run Code Online (Sandbox Code Playgroud) 我确定我忽略了显而易见的内容,但是我找不到一种方法可以一步一步地将data.table非查找联接中的“ lookup”表的所有列联接在一起。
我看了Arun的演示文稿(https://github.com/Rdatatable/data.table/wiki/talks/ArunSrinivasanSatRdaysBudapest2016.pdf)和多个SO问题,但几乎所有问题都只涉及更新单个列,而不涉及多个列。
假设我有2个data.tables a和b:
library(data.table)
a <- data.table(Company_ID = c(1,1,1,1),
salary = c(2000, 3000, 4000, 5000))
# Company_ID salary
# 1: 1 2000
# 2: 1 3000
# 3: 1 4000
# 4: 1 5000
b <- data.table(cat = c(1,2),
LB = c(0, 3000),
UB = c(3000,5000),
rep = c("Bob","Alice"))
# cat LB UB rep
# 1: 1 0 3000 Bob
# 2: 2 3000 5000 Alice
Run Code Online (Sandbox Code Playgroud)
我最终想要的是将cat,LB,UB,rep(在中的所有cols …