0

オブジェクトの状態を表す数値があり、状態の 1 つを確認したいと考えています。たとえば、数値が「22」の場合、16、4、または 2 をチェックすると true を返し、それ以外の場合は false を返す必要があります。私の機能は

containsOrderType <- function(orderType, state) #returns whether the bitmask translates to containing that order type
{
  state <- as.numeric(state)
  if(orderType>state) return(FALSE)
  binState <- as.integer(state)
  class(binState) <- "binmode"
  binState <- as.character(binState)
  dim(binState) <- dim(state)
  X<-log2(orderType)+1
  if(str_sub(binState,-X,-X)==1) return(TRUE)
  return(FALSE)
}

これは今日までの 1 か月間は正常に機能していましたが、dim(state) が常に「NULL」に見える dim([an integer]) を取得していることに問題があると確信しています。これは、R 2.15.3 および R 3.0.1 で発生しました。それが一貫していればわかりますが、この機能はしばらくの間意図したとおりに機能していましたが、現在は機能していません。R.Utils の intToBin 関数は次のとおりです。これは、関数の 3 ~ 6 行目と同じです。

function (x) 
{
    y <- as.integer(x)
    class(y) <- "binmode"
    y <- as.character(y)
    dim(y) <- dim(x)
    y
}

また

>dim
function (x)  .Primitive("dim")
> class
function (x)  .Primitive("class")

そのため、それらはパッケージやそのような奇妙なものによって上書きされていません.

4

3 に答える 3

5

bitwAndたとえば、ベースRで関数を試してください

> bitwAnd(22, 2^(0:10))
 [1]  0  2  4  0 16  0  0  0  0  0  0
> bitwAnd(1:22, 16)
 [1]  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 16 16 16 16 16 16 16
> bitwAnd(4, 2060)
[1] 4
> (bitwAnd(8, 2060) != 0) == containsOrderType(8, 2060)
> TRUE

またはbitopsパッケージbitAndで。

于 2013-09-27T00:24:13.420 に答える