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

R语言data.table fread读取CSV最后N行方法(iris示例)

使用data.table::fread读取CSV文件最后N行的方法

报错原因

你遇到的乱码+空表问题核心原因是*tail是Linux、macOS类Unix系统的内置Shell命令,Windows系统默认不自带该命令*,调用时系统找不到可执行程序直接执行失败,返回空内容给fread,最终得到0行0列的结果,乱码是系统错误提示和R终端编码不匹配导致的。

可用方案

  • 跨平台通用方案(最推荐,无外部依赖)
    不需要调用任何系统外部命令,仅用fread自带参数即可实现,全系统兼容,不会出现路径、斜杠、命令不存在的兼容问题:
    library(data.table)
    fpath <- "C:/Users/TARAS/Desktop/iris.csv"
    # 快速统计文件总行数,内存占用极低
    total_lines <- length(count.fields(fpath))
    # 自定义要读取的最后N行数量
    n_last <- 10
    # 跳过前序行,fread会自动识别保留表头
    last_n_rows <- fread(fpath, skip = total_lines - n_last)
    
    以你导出的iris.csv为例,运行后得到的就是文件最后10行数据,和read.csv读全量后取尾行的结果完全一致。
  • Windows系统命令行方案
    如果习惯用cmd参数调用系统命令,Windows可以直接用PowerShell自带的内容读取命令实现tail效果,不需要额外安装软件:
    fpath <- "C:/Users/TARAS/Desktop/iris.csv"
    n_last <- 10
    last_n_rows <- fread(cmd = paste0('powershell -Command "Get-Content -Path \"', fpath, '\" -Tail ', n_last, '"'))
    
    如果你安装了Git Bash、Rtools或者Cygwin,把对应工具的bin目录加入系统环境变量后,也可以直接用tail命令写法。
  • Linux/macOS系统方案
    类Unix系统原生自带tail命令,直接调用即可,路径包含空格时用单引号包裹路径避免解析错误:
    fpath <- "/home/xxx/Desktop/iris.csv"
    n_last <- 10
    last_n_rows <- fread(cmd = paste0("tail -", n_last, " '", fpath, "'"))
    

注意:如果CSV文件包含引号包裹的换行字段,不要用系统命令取行的方式,命令会把字段内的换行识别为行分隔符导致读取出错,这种场景优先用第一种跨平台原生方案。

内容的提问来源于stack exchange,提问作者mr.T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:15:41