我尝试以动态方式为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):第一个参数无效
任何帮助都将不胜感激。
答案 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)))))