Mar*_*pov 10 r data.table
我想知道给定data.table的原因:
library(data.table)
DT <- structure(list(number = 1:5, bmask = c(FALSE, TRUE, FALSE, TRUE,
FALSE)), .Names = c("number", "bmask"), row.names = c(NA, -5L
), class = c("data.table", "data.frame"))
> DT
number bmask
1: 1 FALSE
2: 2 TRUE
3: 3 FALSE
4: 4 TRUE
5: 5 FALSE
Run Code Online (Sandbox Code Playgroud)
表达式DT[bmask==T,.(out=number)]按预期工作:
out
1: 2
2: 4
Run Code Online (Sandbox Code Playgroud)
但DT[bmask,.(out=number)]会导致错误:
> DT[bmask,.(out=number)]
Error in eval(expr, envir, enclos) : object 'bmask' not found
Run Code Online (Sandbox Code Playgroud)
这是data.table包的正确行为吗?
Jos*_*ien 14
请改用:
DT[(bmask), .(out=number)]
# out
# 1: 2
# 2: 4
Run Code Online (Sandbox Code Playgroud)
括号的作用是将符号bmask放在函数调用中,从其评估环境DT中将显示该列的列1.任何其他函数调用只返回其bmask值(例如c(bmask),I(bmask)或bmask==TRUE)或其真实元素的索引(例如which(bmask))将同样有效,但可能需要稍长的时间来计算.
如果bmask是未设一个函数调用中,它将在呼叫范围(这里的全球环境),也可以是在方便的时间来搜索.以下是相关的解释?data.table:
高级:当'i'是单个变量名时,它不被视为列名的表达式,而是在调用范围中进行评估.
1要查看它()本身是一个函数调用,请键入is(`(`).