如何使用 paste0 寻址变量?
How to address variables with paste0?
假设我有向量 x_1、x_2、x_3 和一个包含它们名称的向量:
x_1<-1:3
x_2<-3:5
x_3<-7:9
names<-c("x_1", "x_2", "x_3")
是否可以使用另一个带有名称的向量来寻址这些向量?例如:
for (i in 1:length(names)) {
print(paste0("x_",i)/2)
}
该示例不起作用,但这正是我想要做的。是否有类似“as.name”或任何将 paste0 输出转换为变量名的函数?
谢谢!
我们可能会在list
中获取names
中所有对象的值(最好使用不同的名称,因为names
是一个base R
函数名) =] 与 mget
,除以 2 并分配 (%=%
回到 names
)
library(collapse)
names %=% lapply(mget(names), `/`, 2)
-输出
> x_1
[1] 0.5 1.0 1.5
> x_2
[1] 1.5 2.0 2.5
> x_3
[1] 3.5 4.0 4.5
在base R
for
循环中,我们可以使用assign
for (i in seq_along(names)) {
assign(paste0("x_",i), get(paste0("x_", i))/2)
}
-检查
> x_1
[1] 0.5 1.0 1.5
> x_2
[1] 1.5 2.0 2.5
> x_3
[1] 3.5 4.0 4.5
我认为您正在寻找 eval(parse(text=...))
组合:
for (i in 1:length(names)) {
print(eval(parse(text=paste0("x_", i)))/2)
}
给予
[1] 0.5 1.0 1.5
[1] 1.5 2.0 2.5
[1] 3.5 4.0 4.5
您可以试试命名列表吗?
tibble::lst(x_1, x_2, x_3)[[names[1]]]
然后你可以循环
for(i in names){
print(tibble::lst(x_1, x_2, x_3)[[i]])
}
假设我有向量 x_1、x_2、x_3 和一个包含它们名称的向量:
x_1<-1:3
x_2<-3:5
x_3<-7:9
names<-c("x_1", "x_2", "x_3")
是否可以使用另一个带有名称的向量来寻址这些向量?例如:
for (i in 1:length(names)) {
print(paste0("x_",i)/2)
}
该示例不起作用,但这正是我想要做的。是否有类似“as.name”或任何将 paste0 输出转换为变量名的函数? 谢谢!
我们可能会在list
中获取names
中所有对象的值(最好使用不同的名称,因为names
是一个base R
函数名) =] 与 mget
,除以 2 并分配 (%=%
回到 names
)
library(collapse)
names %=% lapply(mget(names), `/`, 2)
-输出
> x_1
[1] 0.5 1.0 1.5
> x_2
[1] 1.5 2.0 2.5
> x_3
[1] 3.5 4.0 4.5
在base R
for
循环中,我们可以使用assign
for (i in seq_along(names)) {
assign(paste0("x_",i), get(paste0("x_", i))/2)
}
-检查
> x_1
[1] 0.5 1.0 1.5
> x_2
[1] 1.5 2.0 2.5
> x_3
[1] 3.5 4.0 4.5
我认为您正在寻找 eval(parse(text=...))
组合:
for (i in 1:length(names)) {
print(eval(parse(text=paste0("x_", i)))/2)
}
给予
[1] 0.5 1.0 1.5
[1] 1.5 2.0 2.5
[1] 3.5 4.0 4.5
您可以试试命名列表吗?
tibble::lst(x_1, x_2, x_3)[[names[1]]]
然后你可以循环
for(i in names){
print(tibble::lst(x_1, x_2, x_3)[[i]])
}