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
相关产品推荐
相关产品推荐

