动态创建嵌套的s4类插槽名称并在R中分配值

时间:2016-03-23 21:26:23

标签: r s4 slots

我尝试以动态方式为R中的嵌套s4类槽分配值。到目前为止我所拥有的是下面的代码。我创建了以下嵌套类,以类型为numeric的嵌套槽结束。

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中的错误(解析(text =“object @ slot @ slot”))&lt; - 1:target of target   赋值扩展到非语言对象

尝试使用assign()函数进行分配也无法解决问题。 以下电话:

assign(x = slot(eval(parse(text = "object@slot")), "slot"), value = 1)

给我错误:

  

assign中的错误(x = slot(eval(parse(text =“object @ slot”)),“slot”),   value = 1):第一个参数无效

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案:

对于数字:

eval(parse(text = eval(expression(paste(pasted_slot_path, "<-", value)))))

对于角色:

value = sprintf('"%s"',value)
    eval(parse(text = eval(expression(paste(pasted_slot_path, "<-", value)))))