{integer包含2}函数的某些幂
我有一个表示对象状态的数字,我想检查其中一个状态。例如,如果数字为“22”,则在检查16、4或2时应返回true,而在检查其他任何内容时应返回false。 我的职能是{integer包含2}函数的某些幂,r,R,我有一个表示对象状态的数字,我想检查其中一个状态。例如,如果数字为“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(orderT
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)
}
所以这些都没有被软件包或任何奇怪的东西覆盖。显然,我在程序中移动了一些东西,但不知何故没有包含R.utils本身。。。奇怪,因为我认为我复制了代码,所以我必须包含该包。 不管怎样,我会把这个留着,以防其他人需要。 因为我已经包含了这个包,所以我的代码可以简化为:
containsOrderType <- function(orderType, state) #returns whether the bitmask translates to containing that order type
{
state <- as.numeric(state)
if(orderType>state) return(FALSE)
binState <- intToBin(as.integer(state))
X<-log2(orderType)+1
if(str_sub(binState,-X,-X)==1) return(TRUE)
return(FALSE)
}
containersordertype显然,我在程序中移动了一些东西,但不知何故没有包含R.utils本身。。。奇怪,因为我认为我复制了代码,所以我必须包含该包。
不管怎样,我会把这个留着,以防其他人需要。
因为我已经包含了这个包,所以我的代码可以简化为:
containsOrderType <- function(orderType, state) #returns whether the bitmask translates to containing that order type
{
state <- as.numeric(state)
if(orderType>state) return(FALSE)
binState <- intToBin(as.integer(state))
X<-log2(orderType)+1
if(str_sub(binState,-X,-X)==1) return(TRUE)
return(FALSE)
}
containersordertype例如,在base R中尝试bitwAnd
函数
> 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
或者包中的bitAnd
。例如,尝试在base R中使用bitAnd
函数
> 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
或者包中的bitAnd
。您可以使用gmp::factorize
作为:
Rgames> 2%in%as.numeric(factorize(20))
[1] TRUE
请注意,gmp
函数返回bigz
类内容,这就是原因
Rgames> 2%in%factorize(20)
[1] FALSE
发生了
回答hedgeandlevered的评论——如果您希望您的号码的最大功率为2
,那么
Rgames> 2^(sum(factorize(20)==2))
[1] 4
我会帮你的。(请注意,=
将其参数强制为一个公共类)您可以使用gmp::factorize
作为:
Rgames> 2%in%as.numeric(factorize(20))
[1] TRUE
请注意,gmp
函数返回bigz
类内容,这就是原因
Rgames> 2%in%factorize(20)
[1] FALSE
发生了
回答hedgeandlevered的评论——如果您希望您的号码的最大功率为2
,那么
Rgames> 2^(sum(factorize(20)==2))
[1] 4
我会帮你的。(请注意,=
将其参数强制为一个公共类)此函数仅限于小数值。例如,它找不到乐趣(42060)(这是真的)。@hedgedandlevered使用bitops::bitAnd()
,如果您被限制在R-2.15.x函数不工作的事实使版本兼容性不是真正的问题bitops::bit(82060)返回8,这并不能帮助我了解乐趣(82060)应该是FALSE@hedgedandlevered但是containsOrderedType(8200)
也返回TRUE?此函数仅限于小数字。例如,它找不到乐趣(42060)(这是真的)。@hedgedandlevered使用bitops::bitAnd()
,如果您被限制在R-2.15.x函数不工作的事实使版本兼容性不是真正的问题bitops::bit(82060)返回8,这并不能帮助我了解乐趣(82060)应该是FALSE@hedgedandlevered但是containsOrderedType(8200)
也返回TRUE?这依赖于几个包中的函数;将适当的库调用添加到解决方案中。truelibrary(stringr)
(和前面提到的library(R.utils)
),这依赖于几个包中的函数;将适当的库调用添加到解决方案中。true<代码>库(stringr)
(和前面提到的库(R.utils)
)您正试图以一种真正的方式重新发明轮子。超级酷的家伙,建设性的方式。谢谢你无缘无故的否决。这是一个合理的问题。如果它是“轮子”,那么简单的功能在哪里?它在包bitops
中。告诉我它的实现很糟糕,因为我问了一个我不知道答案的问题而投票否决我是没有意义的。你正试图以一种真正正方的方式重新发明轮子。超级酷的家伙,建设性的方式。谢谢你无缘无故的否决。这是一个合理的问题。如果它是“轮子”,那么简单的功能在哪里?它在包bitops
中。告诉我它的实现不好是好的,因为我问了一个我不知道答案的问题而投票否决我是没有意义的