You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 22:42:46