gpt4 book ai didi

具有唯一性约束的 R vctrs 子类化

转载 作者:行者123 更新时间:2023-12-04 07:50:12 27 4
gpt4 key购买 nike

在 R 中,我需要定义一个 vctrs 的子类具有单一性约束。
我可以在这里为这样的新 uid 提出一个最小的代码矢量类型。

library(vctrs)

new_uid <- function(x) {
if (anyDuplicated(x) > 0) stop("Duplicated id")
new_vctr(x,class="uid")
}

uid <- function(length=0) {
new_uid(0:(length-1))
}

vec_type2.uid.uid <- function(x,y, ...) uid()
vec_type2.uid.uid <- function(x, to, ...) x
我可以创建那种类型的向量
x <- new_uid(1:10)
y <- new_uid(11:20)
如果我有重复的值,则会产生错误
z <- new_uid(c(1:10,2))
Error in new_uid(c(1:10, 2)) : Duplicated id
串联工作并产生更长的 uid向量
vec_c(x,y)
<uid[20]>
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
但是如果它创建了重复项,则不会断言约束并且
因此,不会出现错误。
vec_c(x,x)
<uid[20]>
[1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
正如@Rui-Barradas 提出的 base::c可以专科,
c.uid <- function(...){
x <- unlist(list(...))
#x <- unique(x)
new_uid(x)
}

c(x, x)
# Error in new_uid(x) : Duplicated id
但这并不影响 vctrs::vec_c() tibble 使用的函数...
我可以定义一些东西来使用 vec_c 在连接后强制断言唯一性约束吗? ?
祝一切顺利,

最佳答案

我不确定以下是否是您想要的,我对 vctrs 类的经验(非常)很少。

c.uid <- function(...){
x <- unlist(list(...))
#x <- unique(x)
new_uid(x)
}

c(x, x)
# Error in new_uid(x) : Duplicated id

关于具有唯一性约束的 R vctrs 子类化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67025507/

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