R语言for循环中追加DataFrame失败求助:目标DataFrame始终为空
错误原因
- 核心问题是未将
rbind合并后的结果重新赋值给replys变量。rbind(replys, iteration_i)只是临时生成了合并后的DataFrame,但没有把这个结果存回replys,导致初始的空DataFrame始终未被更新。 - 每次循环的
iteration_i会被下一次迭代的结果覆盖,所以最后仅保留了最后一次的查询数据。
修正方法
方法1:循环内直接更新replys
修改循环中的rbind语句,将合并结果赋值回replys,确保每次迭代都把新数据追加进去:
replys <- data.frame() for (i in 1:nrow(i_tweets)) { iteration_i <- get_all_tweets( conversation_id= i_tweets$conversation_id[i], start_tweets = "2017-05-16T00:00:00Z", end_tweets = "2022-08-06T00:00:00Z", n= 1, bearer_token = get_bearer(), data_path = "replys/") # 关键:将合并结果重新赋值给replys replys <- rbind(replys, iteration_i) }
方法2:列表收集后一次性合并(更高效)
如果i_tweets行数较多,循环内反复rbind会因频繁复制数据导致效率低下。推荐先将每次结果存入列表,最后一次性合并:
# 初始化空列表用于存储每次迭代结果 replys_list <- list() for (i in 1:nrow(i_tweets)) { iteration_i <- get_all_tweets( conversation_id= i_tweets$conversation_id[i], start_tweets = "2017-05-16T00:00:00Z", end_tweets = "2022-08-06T00:00:00Z", n= 1, bearer_token = get_bearer(), data_path = "replys/") # 将当前迭代结果存入列表对应位置 replys_list[[i]] <- iteration_i } # 一次性合并列表中所有DataFrame replys <- do.call(rbind, replys_list) # 若使用dplyr包,可使用更简洁的bind_rows: # library(dplyr) # replys <- bind_rows(replys_list)
内容的提问来源于stack exchange,提问作者Leo Tiedemann
相关产品推荐
相关产品推荐

