将值分配给以字符串形式存储在R中的嵌套列表的索引

斯文肯

我有一个嵌套列表索引的数据框,该列表已存储为字符串。举一个简化的例子:

df1 <- data.frame(x = c("lst$x$y$a", "lst$x$y$b"), stringsAsFactors = F)

这些是以下列表的坐标:

lst <- list(x=list(y=list(a="foo",b="bar",c="")))

我想使用中的索引替换值或为这些元素分配新值df1

一种尝试是

do.call(`<-`, list(eval(parse(text = df1[1,1])), "somethingelse"))

但这似乎不起作用。相反,它分配"something"foo

我对使用并不太满意eval(parse(text=))(维护代码将成为一场噩梦),但意识到我可能别无选择。

欢迎任何提示。

蔡卓妍

让我们考虑3种情况:

情况1

do.call(`<-`, list("lst$x$y$a", "somethingelse"))

这将lst$x$y$a在您的工作空间中创建一个新变量,因此以下两个命令将调用不同的对象。(前者是您存储在中的对象lst,而后者是新变量。您需要使用反引号对其进行调用,因为其名称会混淆R。)

> lst$x$y$a   # [1] "foo"
> `lst$x$y$a` # [1] "somethingelse"

情况二

do.call(`<-`, list(parse(text = "lst$x$y$a"), "somethingelse"))

您基本上可以通过此工具获得期望的结果,但仍然会发生错误:

分配的左侧无效(do_set)

让我们检查:

> parse(text = "lst$x$y$a")  # expression(lst$x$y$a)

它属于class expression,并且操作员<-似乎不接受左侧的此类。


情况3

这将实现您想要的:

do.call(`<-`, list(parse(text = "lst$x$y$a")[[1]], "somethingelse"))

如果将其[[1]]放在expression对象后面call则将提取对象并在操作符中生效<-

> lst

# $x
# $x$y
# $x$y$a
# [1] "somethingelse"
# 
# $x$y$b
# [1] "bar"
# 
# $x$y$c
# [1] ""

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法将属性分配给接口中的字符串索引

如何将字符串值分配给php数组的索引?

C ++中的cin试图将字符串值分配给int变量?

将字典值中的整数分配给字符串中的字符

将新值分配给字符串索引

为什么将int(0)分配给字符串索引会结束循环?

将字符串(从字符串列表中)分配给数据框名称pandas

将变量分配给带有R中字符串的变量

如何将变量分配给具有特定索引的拆分字符串?

在检查列值是否包含作为列表中元素的字符串后,如何将列表中的元素分配给数据框列?(蟒蛇)

将int分配给pandas列表列中的字符串

将字符串分配给R中的变量

将int值分配给特定的字符串

如果将字符放置在字符串(数组)中,则将字符串值分配给字符

将字符串值分配给目标c中的类

将字符串值分配给指向struct的指针中的属性

如何将字符串中的值分配给2d数组?

如何将宏中的字符串随机分配给观察值

通过引用现有列中的字符串将值分配给data.table中的新列

字符串数组无法分配给索引[0]

将捕获的组分配给值,如果不匹配,则分配字符串

将值分配给字符串向量

如何通过索引将值分配给C ++字符串索引

将字符串分配给python中的变量

根据java中的扫描仪输入将枚举值分配给字符串

将 strings.xml 资源值分配给 MainActivity 中的字符串失败

如何根据字符串的三进制值将列表中的位置分配给字符串?

将字符串重新分配给数组中的一组值列表

如何将字符串中的字符分配给对象中的值?