如何遍历 R 中的 S4 对象?

问题描述

我创建了一个保存图片的类。我为班级创建了两个对象(两张图片)。我想要一个循环打印所有图片

```{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 

解决方法

正如评论中提到的,这两行

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",path=full_file_path)
pic_obj_2 <- new("Picture",path=full_file_path)

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...