我有一个字符串,say"ti[123]"
和一个对应的值,say1.2
我应该在 R 中使用什么命令来分配1.2
给 vector 的第 123 个位置ti
?我试过assign("ti[123]",1.2)
了,但它创建了一个带有名称的新变量ti[123]
,这不是我所期望的。
我需要这样做的原因是我使用 rstan 的optimizing
函数来优化模型,它返回一个命名向量,具有这样的名称(如果您碰巧在模型中使用参数向量)。
我有一个字符串,say"ti[123]"
和一个对应的值,say1.2
我应该在 R 中使用什么命令来分配1.2
给 vector 的第 123 个位置ti
?我试过assign("ti[123]",1.2)
了,但它创建了一个带有名称的新变量ti[123]
,这不是我所期望的。
我需要这样做的原因是我使用 rstan 的optimizing
函数来优化模型,它返回一个命名向量,具有这样的名称(如果您碰巧在模型中使用参数向量)。
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
replace(ti, 123, 1.2)
可能会成功。