R中使用toString函数时提示找不到toSrting函数的解决方法
R循环运行报错排查
直接触发当前报错的原因
弹出Error in toSrting(m) : could not find function "toSrting"的核心原因是函数名拼写错误:
- R语言对函数名、变量名严格区分大小写,base包内置的数值转字符串函数正确名称为全小写驼峰的
toString(),你代码里写的toSrting(m)把第二个单词开头的s错打成了大写S,R自然无法匹配到这个拼错名称的函数。 - 之前
toString能正常运行是因为当时的拼写完全正确,这次手滑打错大写字母就直接触发“找不到函数”的报错,和包加载、运行环境没有任何关系。
修正拼写后仍会触发的代码逻辑问题
就算把toSrting改回正确的toString写法,这段代码还有几处逻辑错误会导致后续运行报错:
- 违反R赋值规则的写法:代码里的
paste("trainxr", m) <- raster(trainxr[m,,])不符合R的赋值语法,赋值箭头<-的左侧必须是合法的变量名,不能直接把paste()返回的字符串作为赋值目标,运行到这行马上会报“左侧赋值表达式非法”的错误。如果需要按序号生成带命名的栅格对象,正确做法是提前初始化一个列表容器,比如raster_storage <- list(),在循环内将每次生成的栅格存入列表对应位置:raster_storage[[m]] <- raster(trainxr[m,,]),循环结束后可通过list2env(raster_storage, envir = .GlobalEnv)把列表里的对象批量导出为单独的全局变量。 - for循环的冗余干扰逻辑:
for(m in 1:60000)本身就会自动让m从1遍历到60000,循环体内额外写的m <- m + 1会完全打乱自带的遍历计数,导致循环提前中断、遍历值跳号,属于完全多余的操作;- 循环开头单独写的全局定义
m <- 1会被for循环的遍历值直接覆盖,没有实际作用; - 循环内写的
toString(m)、strtoi(m)两个语句都是执行了计算但没有将结果传入后续流程、也没有赋值给变量的无效代码,在6万次的循环里会无意义消耗运行资源,拖慢整体运行速度。
内容的提问来源于stack exchange,提问作者R7S
相关产品推荐
相关产品推荐

