【问题标题】:Assign vector component using string in R在R中使用字符串分配向量分量
【发布时间】:2015-11-21 19:31:51
【问题描述】:

我有一个字符串,比如"ti[123]",还有一个对应的值,比如1.2 我应该在 R 中使用什么命令将 1.2 分配给向量 ti 的第 123 个位置? 我尝试了assign("ti[123]",1.2),但它创建了一个名为ti[123] 的新变量,这不是我所期望的。

我需要这样做的原因是我使用 rstan 的 optimizing 函数来优化模型,它返回一个命名向量,名称如下(如果你碰巧在模型中使用参数向量)。

【问题讨论】:

  • replace(ti, 123, 1.2) 怎么样?这将用 1.2 替换 123。
  • 如果需要从字符串中提取library(stringr); assign('ti', '[[<-'(ti, as.numeric(str_extract("ti[123]", '(?<=\\[)\\d+')), 1.2))
  • 我敢打赌,有更好的方法可以从 stan 输出中提取结果...

标签: r parsing variable-assignment stan rstan


【解决方案1】:

我们可以使用str_extractassign值从字符串中提取数字

library(stringr)
assign('ti', '[[<-'(ti, as.numeric(str_extract("ti[123]",
                  '(?<=\\[)\\d+')), 1.2))

或者

ti[as.numeric(str_extract("ti[123]", '(?<=\\[)\\d+'))] <- 1.2

另一个选项是 rm_square from library(qdapRegex) 提取数字

library(qdapRegex) 
ti[as.numeric(rm_square('ti[123]', extract=TRUE))] <- 1.2

更新

如果我们不知道对象名称,

str1 <- 'ti[123]'
v1 <- strsplit(str1, '[][]')[[1]]
assign(v1[1], `[[<-`(get(v1[1]), as.numeric(v1[2]), 1.2))
get(v1[1])[123]
#[1] 1.2

或者

ti[123]
#[1] 1.2

【讨论】:

  • 仍然不起作用,因为您将 ti 显示为变量,我无法知道它是 ti 还是其他变量。这一切都必须从字符串中提取出来。
  • @yannick 更新了帖子。请检查是否有帮助
  • 我会将这个(非常复杂的)答案标记为正确,因为rstan 似乎没有提供更简单的方法。
【解决方案2】:

replace(ti, 123, 1.2) 可能会成功。

【讨论】:

  • 是的,但是如何进行字符串解析?
猜你喜欢
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
相关资源
最近更新 更多