我试图了解如何使用向量构建对象。我认为这很简单,但是当我在对象上使用 c() 时遇到了麻烦。
我们的对象有两个属性,x 和描述符,在这种情况下都是字符串(我的对象将具有不同类型的属性)。我们已经构建了一个构造函数 new_toy_vector。我还没有在这个例子中建立一个便利函数。
new_toy_vector <- function(
x = character(),
descriptor = character()) {
vctrs::vec_assert(x,character())
vctrs::vec_assert(descriptor, character())
vctrs::new_vctr(x,
descriptor = descriptor,
class = "toy_vector")
}
format.toy_vector <- function(x, ...) {
paste0(vctrs::vec_data(x)," is ", attr(x, "descriptor"))
}
obj_print_data.toy_vector <- function(x) {
cat(format(x), sep = "\n")
}
c(new_toy_vector("Hello", "Foo"), new_toy_vector("World", "Bar"))
#> Error: No common type for `..1` <toy_vector> and `..2` <toy_vector>.
由reprex 包(v0.3.0)于 2020-04-26 创建
然后我尝试用自己创建一个强制,除非由于某种原因没有定义默认方法:
> vec_ptype2.toy_vector.toy_vector <- function(x, y, ...) new_toy_vector()
> c(new_toy_vector("Hello", "Foo"), new_toy_vector("World", "Bar"))
Error: Can't convert <toy_vector> to <toy_vector>.
有什么我想念或误解的想法吗?为什么我不能合并示例中的两个对象?