R语言中find函数报错解决及功能咨询(is.character(what) is not TRUE)
Hey there! Let's work through your R problem step by step.
问题分析与解决方案
为什么会报错?
首先要明确:R里的find()函数根本不是用来查找逻辑向量中TRUE值位置的!你现在用错工具啦。
find()的真正作用是定位R环境里的对象/函数存储位置——比如某个内置函数属于哪个包,或者你自定义的变量存在哪个环境中。它要求必须传入字符型参数(也就是你要查找的对象/函数的名称字符串),而你传入的是DOY_first < N_days_months_cum生成的逻辑向量,完全不符合它的参数要求,所以才会抛出Error: is.character(what) is not TRUE这个错误。
你真正需要的函数是什么?
看起来你是想找到第一个累计天数超过DOY=239的月份,也就是确定239天对应一年中的第几个月。这时候应该用专门处理逻辑向量的which()或者更简洁的which.min()函数。
可用的正确代码示例
先确认你的数据定义:
N_days_months = c(31,29,31,30,31,30,31,31,30,31,30,31) N_days_months_cum <- cumsum(N_days_months) DOY_first = 239
方案1:用which()获取所有满足条件的位置,再取第一个结果:
IND_DUM <- which(DOY_first < N_days_months_cum)[1] # 结果会是8,因为第8个累计天数(244)是第一个大于239的值,对应8月
方案2:用which.min()更简洁地定位第一个符合要求的位置:
IND_DUM <- which.min(N_days_months_cum <= DOY_first) # 同样返回8,和上面的结果一致
再说说find()的真实用途
为了彻底理清混淆,举两个find()的正确使用场景:
- 查找内置函数所属的包:
find("cumsum")会返回"package:base",说明cumsum()是R基础包中的函数。 - 查找自定义变量的存储位置:如果你定义了
x <- 10,运行find("x")会返回".GlobalEnv",表示这个变量存在全局环境中。
记住:find()只接受字符型输入,绝对不能传逻辑向量或其他非字符类型!
内容的提问来源于stack exchange,提问作者Sss
相关产品推荐
相关产品推荐

