【发布时间】:2016-03-19 10:17:21
【问题描述】:
我有一个data.table
library(data.table)
testDT <- data.table(
L = (1:32),
M = rep(letters[23:26], each = 64),
N = rep(LETTERS[1:2], times = 2, each = 512),
O = rnorm(2048, 1))
testDT$L <- factor(testDT$L, levels = seq(from = 1, to = 32, by = 1))
我创建了一个函数来有条件地对数据集进行子集化。如果子集变量G 是NULL 并且H 是"w",那么我希望testDT$N 中的所有值和testDT$M 中的所有值"w" 都在testDT 中返回。这是我创建的,但无法正常运行:
G <- NULL
H <- "w"
testDT1 <- testDT[if(is.null(G)) {eval(call("%in%", as.name("N"), G))} &
if(is.null(H)) {eval(call("%in%", as.name("M"), H))}]
我验证了除了 if(is.null()) 部分之外的所有内容都可以通过创建它来正常工作,它的子集正确:
G <- "A"
H <- "w"
testDT1 <- testDT[{eval(call("%in%", as.name("N"), G))} &
{eval(call("%in%", as.name("M"), H))}]
如何正确使用is.null() 条件?
【问题讨论】:
-
我在问题中添加了一个额外的细节来阐明我在寻找什么。
-
我正在尝试这样做,因为 a) 我正在使用
shiny和 b) 我有 12 列作为子集。如果我这样做,那么我需要 144 (12^2) 个组合,而如果我能让它正常工作,那么它应该在 12 行中处理它。
标签: r null data.table subset