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

无法向列表追加值:R语言列表操作问题求助

问题:将数据框列转换为包含重复值的列表

我尝试多种方法向列表suburb_shootings追加shooting_cases数据框第4列(BORO列,记录纽约枪击案发区)的值,但均未成功。已尝试的代码如下:

suburb_shootings <- list()
add_shootings_to_suburb_list <- function(){
    total_rows <- nrow(shooting_cases[4])
    for(x in 1:total_rows){
        suburb_shootings[[x]] <- shooting_cases[x,4]
    }
}
add_shootings_to_suburb_list()

另一种尝试:

add_shootings_to_suburb_list <- function(){
    total_rows <- nrow(shooting_cases[4])
    for(x in 1:total_rows){
        suburb_shootings[[x]] <- append(suburb_shootings, shooting_cases[x,4])
    }
}
add_shootings_to_suburb_list()

还有:

add_shootings_to_suburb_list <- function(){
    suburb_shootings <- list()
    total_rows <- nrow(shooting_cases[4])
    for(x in 1:total_rows){
        suburb_shootings <- append(suburb_shootings, shooting_cases[x,4])
    }
}
add_shootings_to_suburb_list()

需求是生成包含重复区名的列表(如Brooklyn可能多次出现),用于后续可视化。

附CSV数据片段(BORO为案发区字段):

INCIDENT_KEY,OCCUR_DATE,OCCUR_TIME,BORO,PRECINCT,JURISDICTION_CODE,LOCATION_DESC,STATISTICAL_MURDER_FLAG,PERP_AGE_GROUP,PERP_SEX,PERP_RACE,VIC_AGE_GROUP,VIC_SEX,VIC_RACE,X_COORD_CD,Y_COORD_CD,Latitude,Longitude,Lon_Lat
236168668,11/11/2021,15:04:00,BROOKLYN,79,0,,false,,,,18-24,M,BLACK,996313,187499,40.68131820000008,-73.95650899099996,POINT (-73.95650899099996 40.68131820000008)
231008085,07/16/2021,22:05:00,BROOKLYN,72,0,,false,45-64,M,ASIAN / PACIFIC ISLANDER,25-44,M,ASIAN / PACIFIC ISLANDER,981845,171118,40.63636384100005,-74.00866668999998,POINT (-74.00866668999998 40.63636384100005)
230717903,07/11/2021,01:09:00,BROOKLYN,79,0,,false,<18,M,BLACK,25-44,M,BLACK,996546,187436,40.68114495900005,-73.95566903799994,POINT (-73.95566903799994 40.68114495900005)

数据集共2万多行。


问题分析

  1. 第一个代码:函数内部修改全局变量suburb_shootings时,未使用<<-赋值符,默认创建局部变量,外部列表不会被修改;另外nrow(shooting_cases[4])写法冗余,直接用nrow(shooting_cases)即可。
  2. 第二个代码:逻辑错误,suburb_shootings[[x]] <- append(...)是将追加后的完整列表赋值给当前索引的元素,而非向列表追加元素。
  3. 第三个代码:函数内定义了局部的suburb_shootings,未返回结果也未修改全局变量,外部无法获取处理后的数据。

正确写法

方法1:直接转换(最简洁)

无需循环,直接将列转换为列表:

suburb_shootings <- as.list(shooting_cases$BORO)
# 或按列索引取
suburb_shootings <- as.list(shooting_cases[,4])

方法2:修正循环写法

如果一定要用循环实现,可修改为:

suburb_shootings <- list()
total_rows <- nrow(shooting_cases)
for(x in 1:total_rows){
    suburb_shootings <- append(suburb_shootings, shooting_cases[x, "BORO"])
}

或在函数内正确处理全局变量:

suburb_shootings <- list()
add_shootings_to_suburb_list <- function(){
    total_rows <- nrow(shooting_cases)
    for(x in 1:total_rows){
        suburb_shootings <<- append(suburb_shootings, shooting_cases[x, "BORO"])
    }
}
add_shootings_to_suburb_list()

两种方法都会生成包含所有重复区名的列表,满足后续可视化需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:40:32