动态创建嵌套的 s4 class 插槽名称并在 R 中分配值
Dynamically create nested s4 class slot names and assign values in R
我尝试以动态方式为 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
给我的错误是:
Error in file(filename, "r") : cannot open the connection.
如果我像这样手动粘贴路径:
eval(parse(text = "object@slot@slot")) <- 1
我得到的错误是:
Error in eval(parse(text = "object@slot@slot")) <- 1 : target of
assignment expands to non-language object
尝试使用 assign()
函数进行赋值也不起作用。
下面的调用:
assign(x = slot(eval(parse(text = "object@slot")), "slot"), value = 1)
给我错误:
Error in assign(x = slot(eval(parse(text = "object@slot")), "slot"),
value = 1) : invalid first argument
如有任何帮助,我们将不胜感激。
我找到了解决方案:
对于数字:
eval(parse(text = eval(expression(paste(pasted_slot_path, "<-", value)))))
对于角色:
value = sprintf('"%s"',value)
eval(parse(text = eval(expression(paste(pasted_slot_path, "<-", value)))))
我尝试以动态方式为 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
给我的错误是:
Error in file(filename, "r") : cannot open the connection.
如果我像这样手动粘贴路径:
eval(parse(text = "object@slot@slot")) <- 1
我得到的错误是:
Error in eval(parse(text = "object@slot@slot")) <- 1 : target of assignment expands to non-language object
尝试使用 assign()
函数进行赋值也不起作用。
下面的调用:
assign(x = slot(eval(parse(text = "object@slot")), "slot"), value = 1)
给我错误:
Error in assign(x = slot(eval(parse(text = "object@slot")), "slot"), value = 1) : invalid first argument
如有任何帮助,我们将不胜感激。
我找到了解决方案:
对于数字:
eval(parse(text = eval(expression(paste(pasted_slot_path, "<-", value)))))
对于角色:
value = sprintf('"%s"',value)
eval(parse(text = eval(expression(paste(pasted_slot_path, "<-", value)))))