【发布时间】:2016-07-11 09:11:38
【问题描述】:
我尝试以动态方式将值分配给 R 中的嵌套 s4 类插槽。到目前为止,我所拥有的是下面的代码。我创建了以下以数字类型的嵌套槽结尾的嵌套类。
setClass('slot', slots = c(slot = 'numeric'))
setClass('object', slots = c(slot = 'slot'))
object = new('object')
object@slot@slot
典型的分配按预期工作:
object@slot@slot = 1
或:
slot(object@slot, "slot") <- 1
我想要做的是动态创建插槽名称 例如,使用来自向量的粘贴进行分配,例如
slot_path = c("object", "slot", "slot")
使用 eval 和 parse 可以将字符串转换为对象并向我显示对象,或者在这种情况下显示对象的槽。
eval(parse(text = paste(slot_path, collapse="@")))
但是,为这种构造赋值似乎无法按预期工作。
eval(parse(text = paste(slot_path, collapse="@"))) <- 2
给我的错误是:
文件错误(文件名,“r”):无法打开连接。
如果我像这样手动粘贴路径:
eval(parse(text = "object@slot@slot")) <- 1
我收到错误消息:
eval(parse(text = "object@slot@slot")) 中的错误
尝试使用assign() 函数进行分配也不起作用。
下面的调用:
assign(x = slot(eval(parse(text = "object@slot")), "slot"), value = 1)
给我错误:
分配错误(x = slot(eval(parse(text = "object@slot")), "slot"), value = 1) : 第一个参数无效
对此的任何帮助将不胜感激。
【问题讨论】:
-
slot 有赋值方法,是你想要的吗?
?methods::`slot<-` -
Nope that is not working: Error in slot(eval(parse(text = "object@slot")), "slot")
-
这就是我使用 assign 函数的原因,因为它应该将值分配给复杂的字符串。