如何在R语言处理向量的函数中使用条件判断和stop终止函数
代码错误点
- 参数定义和传参逻辑错误:你定义
shift函数时要求传入两个参数list和x,但调用map(wordlist, shift)时只传入了单词列表,没有传入x参数,直接触发参数缺失报错。且你在函数内部重新给x赋值了长度为6的随机向量,不符合单个单词逐个处理的逻辑。 - 条件判断逻辑错误:你写的
x>list是将随机数和字符串本身做对比,正确逻辑应该是对比随机数和当前单词的字符长度,即x > nchar(当前单词)。 - 采样语法错误:
sample函数的替换参数写法错误,replace==TRUE是判断表达式,赋值应该用replace = TRUE。 - 错误捕获逻辑不符合需求:直接用
stop会终止整个map遍历,你需要用purrr提供的safely()函数包裹自定义函数,才能实现出错时返回result=NULL、error=错误信息的结构,同时不中断后续单词的处理。
修正后可直接运行的代码
library(purrr) wordlist <- c("Is", "Book", "Appreciate", "Cherry", "Computer", "Of") # 定义移位处理函数 shift <- function(word){ # 每次处理单个单词时生成1个1-4的随机数 x <- sample(1:4, 1, replace = TRUE) # 判断x是否超过单词长度 if (x > nchar(word)) { stop("length of x is greater than the letters in the word!") } # 执行移位 paste0(substr(word, nchar(word)-x+1, nchar(word)), substr(word, 1, nchar(word)-x)) } # 用safely包裹函数,自动生成带result和error的返回结构 safe_shift <- safely(shift) # 遍历处理所有单词 result <- map(wordlist, safe_shift) # 查看结果 result
运行后输出格式和你要求的完全一致,长度为2的单词如Of如果随机到x≥3就会返回错误结果,长度为4的Book随机到x=2时就会输出okbo。
内容的提问来源于stack exchange,提问作者Jake Parker
相关产品推荐
相关产品推荐

