gpt4 book ai didi

r - bigq 向量的名称(R 包 gmp)

转载 作者:行者123 更新时间:2023-12-02 01:30:14 25 4
gpt4 key购买 nike

names bigq 的函数gmp 的向量R 包无法正常工作:

> library(gmp)
> x <- as.bigq(c(0.5,0.5))
> names(x) <- c("a", "b")
> names(x)
[1] "a" "b" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

因此我定义了一个names bigq 的函数类如下,它工作正常:

> names.bigq <- function(x) attr(x, "names")[1:length(x)]
> names(x)
[1] "a" "b"

甚至names(x) <-setNames使用 names.bigq 效果很好功能。但是通过名称访问向量的元素是行不通的:

> x["a"]
bigq(0)

有没有办法让它工作?如果x["a"]x[which(names(x)=="a")]相同那么就可以了:

> x[which(names(x)=="a")]
Big Rational ('bigq') :
[1] 1/2

注意:一个可能的解决方法是转换和反向转换 x在字符模式下。

最佳答案

通过其索引在 bigq 向量或矩阵中提取元素的函数是内部 `[.bigq` 函数:

> gmp:::`[.bigq`
function (x, i = NULL, j = NULL, drop = TRUE)
{
.Call(matrix_get_at_q, x, i, j)
}
<environment: namespace:gmp>

然后用这个覆盖它:

`[.bigq` <- function (x, i = NULL, j = NULL, drop = TRUE) 
{
if(is.character(i)){ i <- which(names(x)==i) }
.Call(gmp:::matrix_get_at_q, x, i, j)
}

它有效:

> x <- as.bigq(c(2,5))
> names(x) <- c("a", "b")
> x[1]
Big Rational ('bigq') :
[1] 2
> x["a"]
Big Rational ('bigq') :
[1] 2

更好:

`[.bigq` <- function (x, i = NULL, j = NULL, drop = TRUE) 
{
if(is.character(i)){ i <- sapply(i, function(k) which(names(x)==k), USE.NAMES=FALSE) }
.Call(gmp:::matrix_get_at_q, x, i, j)
}

得到:

> x[c("a","b")]
Big Rational ('bigq') object of length 2:
[1] 1 2
> x[c("b","a")]
Big Rational ('bigq') object of length 2:
[1] 2 1

关于r - bigq 向量的名称(R 包 gmp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34709789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com