R语言访问引用类对象列表字段返回NULL问题求解
问题原因
- 变量名拼写错误:你存储所有curve实例的容器变量名为
curves,但访问时调用的是curve[1]。curve是你通过setRefClass定义的引用类生成器,并非存储实例的列表,自然无法读取到实例字段。 - 容器类型与索引方式不匹配:你初始化容器时使用了
curves <- c()生成原子向量,配合append追加引用类对象时,R会自动将引用类的S4结构拆解为列表元素存入,使用单中括号[索引时返回的是包裹了实例对象的长度为1的列表,而非实例本身,直接调用$runID自然返回NULL。
解决方法
- 首先调整实例存储逻辑,初始化时直接使用列表容器,通过双中括号赋值避免对象结构被拆解:
nm <- list.files(path="C:/Users/C176616/OneDrive - Eli Lilly and Company/PAM R/PAM R/data") setwd("./data") # 初始化空列表而非原子向量 curves <- list() for (i in seq_along(nm)){ filen <- nm[i] mCurve <- curve$new() rawCurve <- read_csv(filen, na = "empty", skip = 278) mCurve$runID <- filen mCurve$x <- head(rawCurve$mm, -1) mCurve$y <- head(rawCurve$N, -1) # 用双中括号赋值到列表对应位置 curves[[i]] <- mCurve }
- 访问实例字段时,使用双中括号
[[取出列表中存储的实例对象,再调用对应字段即可:
# 正确读取第一个实例的runID字段 curves[[1]]$runID
如果不想修改之前的存储逻辑,临时读取可以用curves[1][[1]]$runID的写法,但是更推荐修改容器初始化和赋值逻辑,避免后续出现其他类操作异常。
内容的提问来源于stack exchange,提问作者Kevin Collins
相关产品推荐
相关产品推荐

