Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用;获得;到向量中的所有元素-或-使用r中的顺序变量_R - Fatal编程技术网

应用;获得;到向量中的所有元素-或-使用r中的顺序变量

应用;获得;到向量中的所有元素-或-使用r中的顺序变量,r,R,我有六个矩阵:m1、m2、m3、m4、m5和m6。举个简单的例子,假设它们看起来像这样: m1<- matrix(1:10, 2, 5) m2<- matrix(11:20, 2, 5) m3<- matrix(21:30, 2, 5) m4<- matrix(31:40, 2, 5) m5<- matrix(41:50, 2, 5) m6<- matrix(51:60, 2, 5) 因为每次运行scrip时矩阵的数量都会发生变化,所以我正在寻找一种通过编程

我有六个矩阵:m1、m2、m3、m4、m5和m6。举个简单的例子,假设它们看起来像这样:

m1<- matrix(1:10, 2, 5)
m2<- matrix(11:20, 2, 5)
m3<- matrix(21:30, 2, 5)
m4<- matrix(31:40, 2, 5)
m5<- matrix(41:50, 2, 5)
m6<- matrix(51:60, 2, 5)
因为每次运行scrip时矩阵的数量都会发生变化,所以我正在寻找一种通过编程实现的方法。我的第一个目标是承担以下职能:

paste("m",1:6,sep="")
get(paste("m",1:6,sep=""))
上面的表达式返回了一个字符串:

[1] "m1" "m2" "m3" "m4" "m5" "m6"
为了找到值,而不是矩阵的名称,我尝试在混合中添加“get”,函数为:

paste("m",1:6,sep="")
get(paste("m",1:6,sep=""))
但是“get”表达式只返回m1的值,而忽略了我想要的所有其他内容。所以,我开始胡闹for循环:

for(k in 1:6){
if(k == 1){b<- paste("m",k,sep="")}
else{b<- c(b, paste("m",k,sep=""))}
}

> b
[1] "m1" "m2" "m3" "m4" "m5" "m6"
for(1:6中的k){
如果(k==1){b


这可能是错误的。将矩阵放入列表中,然后将函数
f
应用于
列表的所有元素

m1<- matrix(1:10, 2, 5)
m2<- matrix(11:20, 2, 5)
m3<- matrix(21:30, 2, 5)
m4<- matrix(31:40, 2, 5)
m5<- matrix(41:50, 2, 5)
m6<- matrix(51:60, 2, 5)

f<-function(x) sum(x) # A test function
l<-list(m1,m2,m3,m4,m5,m6)
lapply(l,f)

通常,如果你开始考虑迭代变量名,那你就错了。根据我的经验,在大多数编程语言中都是这样。

将矩阵存储在一个列表中
l=list(m1,m2,m3,m4,m5,m6)
,然后使用
do.call(f,l)

尝试
sapply(ls(pattern=“m”),get)
。这很难说得太具体,但我同意下面的一个答案:这里真正的问题是,你正在以一种类似于非R的方式做事。最好的解决方案可能是更改你的函数
f
,使它接受一个矩阵列表,而不是一个长长的参数列表。
w<- f(get(b[1:6]))
b<- list(m1,m2,m3,m4,m5,m6)
m1 <- matrix(1:4, ncol=2) # some dummy matrices
m2 <- m1*2
m3 <- m2+2
m4 <- m1*3


b <- paste0('m', 1:4)
b

for(i in 1:length(b)) {
 print( get(b[i]) )
  }
lapply(b, get)
m1<- matrix(1:10, 2, 5)
m2<- matrix(11:20, 2, 5)
m3<- matrix(21:30, 2, 5)
m4<- matrix(31:40, 2, 5)
m5<- matrix(41:50, 2, 5)
m6<- matrix(51:60, 2, 5)

f<-function(x) sum(x) # A test function
l<-list(m1,m2,m3,m4,m5,m6)
lapply(l,f)
start<-seq(1,51,by=10)
gen<-function(x) matrix(x:(x+9),2,5)
l<-lapply(start,gen)