R函数调用get_text_as_string未赋值?同警告外部正常函数内失效
问题原因及解决办法
核心原因
- 函数内部定义的
object是局部变量,仅存在于函数运行的临时环境中,函数执行结束后会被清理,不会自动同步到全局环境。而直接执行代码时,变量是在全局环境创建的,所以能正常保留。 - 那个
incomplete final line警告只是因为目标文本文件的最后一行没有换行符,和变量赋值问题无关,属于文件格式的小提示。
解决办法
方法1:让函数返回结果,在全局环境赋值
修改函数,让它返回读取到的文本内容,调用时将函数结果赋值给全局的object:
gen <- function(file){ # 函数最后一行的表达式会自动作为返回值 get_text_as_string(file) } # 调用时主动赋值到全局环境 object <- gen("path/name.txt")
也可以显式写return()语句,效果完全一致:
gen <- function(file){ res <- get_text_as_string(file) return(res) } object <- gen("path/name.txt")
方法2:强制修改全局环境变量(不推荐)
用<<-赋值符号直接在全局环境创建object,但这种写法会打破函数的封装性,容易引发意外的变量冲突,一般不建议使用:
gen <- function(file){ object <<- get_text_as_string(file) } gen("path/name.txt")
消除换行警告(可选)
如果想去掉那个文件换行的警告,可以自定义读取逻辑,给readLines加warn = FALSE参数:
get_text_as_string_no_warn <- function(file){ paste(readLines(file, warn = FALSE), collapse = "\n") } # 用自定义函数替代原函数即可 object <- get_text_as_string_no_warn("path/name.txt")
内容的提问来源于stack exchange,提问作者tbkent
相关产品推荐
相关产品推荐

