&引用;索引;(在数学意义上)R中的变量,以便在循环的每次迭代中选择正确的变量

&引用;索引;(在数学意义上)R中的变量,以便在循环的每次迭代中选择正确的变量,r,loops,for-loop,R,Loops,For Loop,我有28个变量。它们中的每一个都是数值类的向量。这些向量的名称是sub_1、sub_2、sub_3,一直到sub_28 我想用这些向量来计算一个由28个方程组成的系统,其中每个方程只涉及其中一个向量。 每个方程的右边是我想对每个向量进行的计算,左边是我想存储每个计算结果的地方 这就是我要做的。首先,我声明一个长度为28的向量 α=向量(“数字”,28) 此向量的每个分量将存储相应的计算输出。 例如,我想将alpha[1]设置为 1+长度(sub_1)*(总和(log(sub_1/(1.5)))

我有28个变量。它们中的每一个都是数值类的向量。这些向量的名称是sub_1、sub_2、sub_3,一直到sub_28

我想用这些向量来计算一个由28个方程组成的系统,其中每个方程只涉及其中一个向量。

每个方程的右边是我想对每个向量进行的计算,左边是我想存储每个计算结果的地方

这就是我要做的。首先,我声明一个长度为28的向量

α=向量(“数字”,28)

此向量的每个分量将存储相应的计算输出。

例如,我想将alpha[1]设置为

1+长度(sub_1)*(总和(log(sub_1/(1.5)))

我想把alpha[2]设为

1+长度(sub_2)*(总和(log(sub_2/(1.5)))

等等。你明白了

我考虑使用“for”循环。这就是我想到的:

对于(1:28中的i){ α[i]=1+长度(sub_i)*(总和(log(sub_i/(1.5)))}

我知道这个代码到底出了什么问题。编译器搜索名为sub_i的变量,但找不到该变量,因为我没有声明它我想要的是编译器将_I作为子索引读取。我希望编译器在循环的每次迭代中查找子索引I与迭代次数匹配的子索引I向量。如何实现这一点


编辑:顺便说一下,28个向量的长度不同。

我会将28个数值变量向量放入一个列表中,并对所有列表元素应用一个函数。 模拟数据:

set.seed(1) # for reproducibility
# pick some random vector lengths
veclengths <- sample(50:100, 28, replace = TRUE) 
# generate random numeric values to generate the vectors
my.variables <- lapply(veclengths, function(x) rnorm(x,100,10))
# name the vectors as in your example (not required)
names(my.variables) <- paste0("sub_", seq_along(my.variables))
# extract these 28 separate vectors as individual variables for your use case
list2env(my.variables , envir = .GlobalEnv)
set.seed(1)#用于再现性
#选择一些随机向量长度
向量长度
vars <- ls(pattern="sub_.*") # pick variables by name pattern
# I sorted here numerically, for convenience
my.variables <- mget(vars[order(as.numeric(gsub("sub_", "", vars)))])
resfun <- function(x) {1 + length(x)*(sum(log(x/(1.5))))}
alpha <- unlist(lapply(my.variables, resfun))