1

私はdata.tableRに次のように持っています:

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]

ただし、これらの戻り値は依然としてクラス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 に答える