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

R语言自定义函数报错排查:对象未找到与意外‘{’错误

排查你的R函数错误

咱们一步步拆解你遇到的问题:

1. 语法错误:unexpected '{'

这个错误是因为你的for循环条件后面少了一个闭合括号。原代码里的:

for(i in 1:length(y[,1]){

应该改成:

for(i in 1:length(y[,1])){

R解析代码时会严格匹配括号,少了这个)会导致它无法识别循环的起始位置,直接触发语法报错。

2. 对象未找到:Error: object 'y' not found

这个问题和函数本身无关,是调用函数时的操作问题:

  • 你需要先定义好传入函数的3列data.frame y,比如先运行类似这样的代码创建测试数据:
    # 示例:创建一个3列、10行的测试data.frame
    y <- data.frame(
      col1 = 1:10,
      col2 = sample(1:38, 10, replace = TRUE),
      col3 = sample(0:5, 10, replace = TRUE)
    )
    
  • 然后再调用probfinal(y),这样R才能找到y这个对象。

3. 潜在的长度不匹配问题

你的代码里prev<-numeric(20)固定设置了长度为20,但如果传入的y行数不是20,就会出现索引越界或者结果长度不对的情况。建议改成根据y的行数动态设置:

prev <- numeric(nrow(y))

修改后的完整代码

probfinal <- function(y){
  x <- c(0,1,3)
  # 动态匹配y的行数,避免固定长度的问题
  prev <- numeric(nrow(y))
  # 修复for循环的括号,用nrow(y)比length(y[,1])更直观
  for(i in 1:nrow(y)){
    prev[i] <- y[i,3] + sum(sample(x, 38 - y[i,2], replace = TRUE, prob = c(0.4,0.2,0.4)))
  }
  ligprev <- cbind(y, prev)
  return(ligprev)
}

测试一下:先创建上面的y,然后运行probfinal(y),应该就能正常输出结果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:32:29