R语言循环输出结果不符合预期?如何修正URL生成代码
修正R语言URL生成代码
原代码的问题分析
- 索引混淆:错误用
all_names[j]获取名称,应该用all_names[i]——i是名称列表的索引,j是要生成的编号(1-5) - 赋值覆盖:
all_urls[[i]]在每次j循环时会被覆盖,最终每个位置只保留最后一次循环的结果,没法存储每个名称对应的5个URL - 编号错误:URL中的编号应该用
j而非i,需求是每个名称对应5个不同编号(1-5)的URL
修正后的循环代码
all_names = list("name1", "name2", "name3", "name4", "name5") a = "https://www.website.ca/" b = "/ext1/" c = ".com" all_urls = list() # 先遍历每个名称 for (i in 1:length(all_names)) { name = all_names[[i]] # 为当前名称生成5个带编号的URL name_urls = c() for (j in 1:5) { url = paste0(a, j, b, name, c) name_urls = c(name_urls, url) } # 将当前名称的URL列表存入总列表 all_urls[[i]] = name_urls } # 查看生成结果 print(all_urls)
更简洁的R风格实现(无需循环)
R中可以用组合生成+批量拼接的方式替代循环,代码更简洁高效:
all_names = c("name1", "name2", "name3", "name4", "name5") # 建议用向量替代列表,操作更方便 a = "https://www.website.ca/" b = "/ext1/" c = ".com" # 生成所有名称和编号的组合 url_combinations = expand.grid(name = all_names, num = 1:5) # 批量拼接URL all_urls = paste0(a, url_combinations$num, b, url_combinations$name, c) # 如果需要按名称分组为列表格式 all_urls_list = split(all_urls, url_combinations$name) print(all_urls_list)
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

