1

因此,我data.table在 R 中有一个:

my.dt <- data.table(x=seq(1:5),y=(c(TRUE, TRUE, FALSE, FALSE, FALSE)))

我想从中提取一个值或一个值向量:

boolean.vector <- my.dt[x<4,"y",with=FALSE]
boolean.value <- my.dt[x<2,"y",with=FALSE]

但是,这些返回值仍然属于 class data.table。因此,例如,我不能执行以下操作:

> if(boolean.value) { print("Hello") }
Erro em if (boolean.value) { : argumento não é interpretável como lógico
# (Error in if (boolean.value) { : argument cannot be interpreted as logical)

如何检索原始值以便以这种方式使用它们?

4

2 回答 2

3

代替

my.dt[1:3,"y",with=FALSE]

我只会做以下之一:

my.dt$y[1:3]
my.dt[["y"]][1:3]
my.dt[x<2, "y"][[1L]]
my.dt[1:3, get(y)]
my.dt[1:3, eval(as.name(y))]

在基础 R[[中不会复制向量(它是更改时复制),因此这是非常有效的,并且不需要为此使用data.table语法。

于 2012-11-30T16:18:47.993 回答
2

您可以使用该unlist函数将输出转换为布尔向量:

unlist(boolean.value)
   y 
TRUE 

unlist(boolean.vector)
   y1    y2    y3 
 TRUE  TRUE FALSE 
于 2012-11-30T16:10:20.257 回答