You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保存含嵌套while循环的for循环输出?R语言日长计算场景

R DataFrame按纬度计算全年日长的实现方法

方案1:基于原有循环逻辑修改

核心逻辑为提前预分配和原始数据行数匹配的365列矩阵,循环过程中将计算结果写入对应位置,最后和原数据合并得到目标格式输出。
代码如下:

# 预分配存储日长的矩阵,列名对应一年中每天的序号
daylength_mat <- matrix(NA, nrow = nrow(df), ncol = 365, dimnames = list(NULL, paste0("doy_", 1:365)))

# 原有循环逻辑修改,将结果写入预分配的矩阵
for (i in 1:nrow(df)){
  j <- 1
  while(j <= 365){
    daylength_mat[i, j] <- daylength(lat = df$latitude[i], doy = j)
    j <- j + 1
  }
}

# 合并原数据与日长计算结果
df_output <- cbind(df, daylength_mat)

方案2:更高效的向量化实现(无需嵌套循环)

利用R的向量化特性简化代码,同时大幅提升运行效率:

# 逐行遍历纬度,一次性计算全年365天日长
daylength_mat <- t(sapply(df$latitude, function(lat_val) daylength(lat_val, 1:365)))
colnames(daylength_mat) <- paste0("doy_", 1:365)

# 合并得到最终输出
df_output <- cbind(df, daylength_mat)

得到的df_output即符合要求的输出格式:保留原DataFrame的所有字段,额外新增365列对应一年中每天的日长数值,每行对应一条原始纬度记录。

内容的提问来源于stack exchange,提问作者coder_001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:27:05