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

如何解决R代码中的Error in 2:n : NA/NaN argument错误?

解决R代码中的Error in 2:n : NA/NaN argument问题

我来帮你搞定这个报错!这个错误的核心原因很明确:你在尝试生成2:n这样的序列时,n的值是NA或者无效的,R没法基于空值生成连续序列。结合你贴的代码来看,问题根源出在数据获取环节,下面一步步拆解修复:

先找代码里的坑

1. 无效的股票代码拖后腿

你在pdfetch_YAHOO里写的tickers列表最后带了个...,这完全不是合法的股票代码啊!Yahoo Finance根本识别不了,直接导致数据获取失败,返回空数据或者NA,后续用到行数nrow(data)的时候自然就成了NA,触发2:n的报错。

2. 变量赋值逻辑混乱

你在函数参数里直接写tickers<- c(...),这相当于在传参的时候重新给tickers赋值,不仅容易搞混变量,还让你之前定义的完整tickers列表白写了。

一步步修复代码

第一步:清理并整合股票代码

先把无效的...删掉,把道指代码^DJI和你之前定义的个股代码合并成完整的合法列表:

# 保留你原来的个股代码(注意:DWDP已更名为DD,GE已从道指移除,我帮你修正了)
tickers <- c("AXP","MMM","BA","CAT","CVX","CSCO","KO","DD","AAPL","XOM","GS","HD","IBM","INTC","HPI","AIV","MCD","MRK","MSFT","NKE","PFE","PG","TRV","JPM","UTX","VZ","V","WMT","DIS")
# 加上道指代码,组成完整查询列表
full_tickers <- c("^DJI", tickers)

第二步:安全获取数据并做有效性检查

获取数据后先检查是否成功,避免后续操作踩坑:

# 用tryCatch捕获可能的获取错误,比如网络问题、代码无效
tryCatch({
  data <- pdfetch_YAHOO(full_tickers)
  
  # 检查数据是否为空
  if (nrow(data) == 0) {
    stop("没获取到任何数据,大概率是代码有问题")
  }
  
  # 现在再用2:n就安全了,先确认行数足够
  if (nrow(data) >= 2) {
    # 举个例子:取第2行到最后一行的数据
    subset_data <- data[2:nrow(data), ]
    cat("成功生成数据子集!行数:", nrow(subset_data), "\n")
  } else {
    cat("数据只有1行,没法生成2:n的序列哦\n")
  }
}, error = function(e) {
  cat("出错啦:", e$message, "\n")
  cat("建议检查:股票代码是否合法、网络是否正常\n")
})

第三步:替换备选方案(可选)

如果pdfetch_YAHOO经常抽风,可以换成quantmod包的getSymbols,稳定性更好:

library(quantmod)
# 获取道指数据
getSymbols("^DJI")
# 获取个股数据
getSymbols(tickers)

完整修复后的代码

library(pdfetch)
library(tidyverse)
library(xts)

# 定义合法股票代码
tickers <- c("AXP","MMM","BA","CAT","CVX","CSCO","KO","DD","AAPL","XOM","GS","HD","IBM","INTC","HPI","AIV","MCD","MRK","MSFT","NKE","PFE","PG","TRV","JPM","UTX","VZ","V","WMT","DIS")
full_tickers <- c("^DJI", tickers)

# 安全获取并处理数据
tryCatch({
  data <- pdfetch_YAHOO(full_tickers)
  
  if (nrow(data) == 0) {
    stop("数据获取失败,请检查股票代码")
  }
  
  if (nrow(data) >= 2) {
    subset_data <- data[2:nrow(data), ]
    print("数据子集生成成功")
  } else {
    print("数据行数不足,无法生成2:n序列")
  }
}, error = function(e) {
  message("错误信息:", e$message)
  message("排查方向:股票代码有效性、网络连接、API可用性")
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:31:45