【问题标题】:R S4 object datatype hashR S4 对象数据类型哈希
【发布时间】:2021-02-14 09:19:24
【问题描述】:

有哈希的数据类型吗?我试图为哈希值生成一个具有数据类型字符的类,但出现错误:

validObject(.Object) 中的错误:无效类“图片”对象:1: “图片”类中插槽“mD5sum”的无效对象:得到类“哈希”, 应该是或扩展类“字符”无效类“图片”对象 2:“图片”类中插槽“sHA1sum”的无效对象:得到类 “哈希”,应该是或扩展类“字符”调用:<.....>

生成类代码:

setClass("Picture", slots=list(id="numeric", mD5sum="character", sHA1sum="character"))

向类添加数据(这会出错):

md5sum <- as.character(openssl::md5(file(full_file_path)))
sha1sum <- as.character(openssl::sha1(file(full_file_path)))
pic_obj <- new("Picture", id=1, mD5sum=md5sum, sHA1sum=sha1sum)

完整的代码块:

```{r}
setClass("Picture", slots=list(id="numeric", mD5sum="character", sHA1sum="character"))
full_file_path <- "testphoto.JPG"
md5sum <- as.character(openssl::md5(file(full_file_path)))
sha1sum <- as.character(openssl::sha1(file(full_file_path)))
pic_obj <- new("Picture", id=1, mD5sum=md5sum, sHA1sum=sha1sum)
```

【问题讨论】:

    标签: r s4


    【解决方案1】:

    不,hash 不是原子类型(R 最接近“数据类型”的想法)。散列值(例如来自openssl::md5)通常输出为character(尽管如果输出足够小,原则上它们可以是integer)。

    如果想知道某个类是否存在,可以使用isClass

    > isClass("hash")
    [1] FALSE
    > isClass("character")
    [1] TRUE
    

    【讨论】:

    • 我怎么会得到错误“validObject(.Object) 中的错误:无效类“图片”对象:1:类“图片”中插槽“mD5sum”的无效对象:得到类“哈希” ,应该是或扩展类“字符”?
    • 你做过class(x) &lt;- "hash"之类的事情吗?它使用的是 S3 机制而不是 S4,并且可能无法按您的意愿工作。
    • 是的,我厌倦了。我正在使用 S4。
    猜你喜欢
    • 2022-09-28
    • 2012-05-02
    • 2017-06-12
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 2017-01-26
    相关资源
    最近更新 更多