【问题标题】:How to iterate over a loop如何遍历循环
【发布时间】:2019-04-26 13:06:53
【问题描述】:

我想自动执行此操作,而不是输入 1500 次。

n1 <- spei[sp_latong[[1]]$lon_indx,sp_latong[[1]]$lat_indx,ind_time]
.
.
.
n1500 <- spei[
  sp_latong[[1500]]$lon_indx,
  sp_latong[[1500]]$lat_indx,
  ind_time ]  
         ### create final data
dat1 <- cbind(n1,n2,...,n1500)

我尝试使用循环,我有以下代码:

    t <- 0
    for(i in 1: length(sp_latong){
    t[[i]] < - 
    spei[sp_latong[[i]]$lon_indx,sp_latong[[i]]$lat_indx,ind_time]  
    }

我收到一条错误消息

spei[sp_latong[[i]]$lon_indx, sp_latong[[i]]$lat_indx] 中的错误: 维数不正确。

我不得不将 t[[i]] 更改为 t[i] 和 t,我得到了同样的错误信息。任何建议将不胜感激。

注意:spei 是一个大数组 sp_latong 是列表

【问题讨论】:

  • 您可能会使用apply family 或purrr library 来实现。你能给我们举一个你的数据的例子吗?对小样本使用dput(data)dput(head(df))
  • @Dave2e 我试过了,但收到了 50 条警告消息。这是 t[i]
  • 您的代码中有&lt; - 吗?你想要&lt;-
  • 我按照建议使用向量命令,但收到错误消息 In t[i]
  • 您上面提到的错误是指spei[sp_latong[[i]]$lon_indx, sp_latong[[i]]$lat_indx, ind_time]这一行。通过添加“ind_time”,您已经为该数组指定了第三维。如果不查看您的数据样本,就很难理解您的意图。

标签: r iteration


【解决方案1】:

我根据 Dave2e 的想法用下面的代码修复了它

    t<- list()
    for(i in 1:length(sp_latong)){

    t[[i]] <- spei[sp_latong[[i]]$lon_indx,sp_latong[[i]]$lat_indx,ind_time]

    }

@Dave2e 非常感谢。

【讨论】:

  • 或简称:t &lt;- lapply(sp_latong, function(sp) spei[sp$lon_indx, sp$lat_indx, ind_time])
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
  • 2021-12-07
  • 2020-07-28
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多