如何保存含嵌套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
相关产品推荐
相关产品推荐

