在 R 中使用字符串分配向量分量
Assign vector component using string in R
我有一个字符串 "ti[123]"
和一个对应的值 1.2
我应该在 R 中使用什么命令将 1.2
分配给向量 ti
的第 123 个位置?
我尝试了 assign("ti[123]",1.2)
,但它创建了一个名称为 ti[123]
的新变量,这不是我所期望的。
我需要这样做的原因是我使用 rstan 的 optimizing
函数来优化模型,它 returns 一个命名向量,名称如下(如果你碰巧使用向量模型中的参数)。
replace(ti, 123, 1.2)
可能会成功。
我们可以使用 str_extract
和 assign
值
从字符串中提取数字
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
从 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[123]"
和一个对应的值 1.2
我应该在 R 中使用什么命令将 1.2
分配给向量 ti
的第 123 个位置?
我尝试了 assign("ti[123]",1.2)
,但它创建了一个名称为 ti[123]
的新变量,这不是我所期望的。
我需要这样做的原因是我使用 rstan 的 optimizing
函数来优化模型,它 returns 一个命名向量,名称如下(如果你碰巧使用向量模型中的参数)。
replace(ti, 123, 1.2)
可能会成功。
我们可以使用 str_extract
和 assign
值
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
从 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