【问题标题】:How can i iterate trough a S4 object in R?我如何遍历 R 中的 S4 对象?
【发布时间】:2021-02-14 09:47:14
【问题描述】:

我创建了一个包含图片的类。在课堂上,我创建了两个对象(两张图片)。我想要一个打印所有图片的循环。

```{r echo=FALSE, comment=""}
# Generate class
setClass("Picture", slots=list(id="numeric", path="character"))

# Add first picture
full_file_path <- "testphoto.JPG"
pic_obj <- new("Picture", id=1, path=full_file_path)

# Add second picture
full_file_path <- "parrot.jpeg"
pic_obj <- new("Picture", id=2, path=full_file_path)

# Loop trough pictures (how? for? foreach? while?)
cat("ID=", pic_obj@id, "\n")
cat("Path=", pic_obj@path, "\n")
```

打印出来:

ID= 2 
Path= parrot.jpeg 

但是我想要这个:

ID= 1 
Path= testphoto.JPG
ID= 2 
Path= parrot.jpeg 

【问题讨论】:

  • 您的问题是您正在创建和覆盖同一个对象。对于您的问题,您应该 1) 拥有一个可以扩展的对象(例如 list)或 2) 创建一个可以迭代的对象列表。
  • 奥利弗我该怎么做?

标签: r s4


【解决方案1】:

如 cmets 中所述,这两行

pic_obj <- new("Picture", id=1, path=full_file_path)

pic_obj <- new("Picture", id=2, path=full_file_path)

创建一个名为pic_obj 的对象,然后覆盖它,这样第一个就丢失了。相反,尝试任一

pic_obj_1 <- new("Picture", id=1, path=full_file_path)
pic_obj_2 <- new("Picture", id=2, path=full_file_path)

pic_obj <- new("Picture", id=1:2, path=c(full_file_path_1,full_file_path_2))

如果您选择第二个选项,则需要确保您为 picture 类编写的任何方法(函数)都可以使用向量参数。

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2022-01-24
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    相关资源
    最近更新 更多