gpt4 book ai didi

r - 将 "get"应用于向量中的所有元素 - 或 - 在 r 中使用顺序变量

转载 作者:行者123 更新时间:2023-12-02 22:09:40 25 4
gpt4 key购买 nike

我有六个矩阵: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)

最终,我想对所有 6 个应用一个函数:

f(m1,m2,m3,m4,m5,m6)

因为每次运行脚本时矩阵的数量都会有所不同,所以我正在寻找一种以编程方式执行此操作的方法。我的第一个通过是采取以下功能:

paste("m",1:6,sep="")

上面的表达式返回了一个字符串:

[1] "m1" "m2" "m3" "m4" "m5" "m6"

为了找到值而不是矩阵的名称,我尝试通过以下函数将“get”添加到组合中:

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"

这与我第一次尝试时得到的字符串相同。因此,以下表达式失败:

w<- f(b)

我也试过:

w<- f(get(b))

不出所料,R 将 m1 识别为矩阵,但忽略了 B 中的其余项。

我也试过:

w<- f(get(b[1:6]))

当我这样做时,我得到了与上面相同的结果。

最后,我还尝试将 b 变成一个列表:

b<- list(m1,m2,m3,m4,m5,m6)

我曾希望使用 lapply(b, g),但该函数(我没有编写并且有义务使用)在放入 lapply 时无法正常工作。

关于如何完成这个看似简单的任务,我还有其他想法吗?我对 R 还是比较陌生,所以很可能有一种我不知道的众所周知的方法,但我在搜索现有文档时找不到任何东西,我觉得需要帮助来解决问题是愚蠢的这个小为论坛的帮助干杯。

最佳答案

您可能以错误的方式进行处理。将您的矩阵放入一个列表中,然后将您的函数 flapplylist 的所有元素。

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)

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

关于r - 将 "get"应用于向量中的所有元素 - 或 - 在 r 中使用顺序变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15531650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com