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

在R的Tidyverse mutate中调用Python tiktoken模块报错的技术咨询

解决reticulate调用tiktoken在mutate中报错的问题

错误原因

你在mutate里直接用encoding$encode(name)时,name是整个列的向量,但tiktoken的encode方法只能处理单个字符串,没法直接处理向量,这就触发了cnd_type()的错误。

两种可行解决方法

方法1:用rowwise()逐行处理

给数据框加上行分组,让mutate逐行对每个字符串执行编码操作:

library(tidyverse)
library(reticulate)

tiktoken <- import("tiktoken")
encoding <- tiktoken$encoding_for_model("gpt-4")

beatles <- data.frame(
  name=c("John Lennon", "Paul McCartney", "George Harrison", "Ringo Starr"),
  instrument=c("Guitar", "Bass", "Guitar", "Drums")
)

beatles %>%
  rowwise() %>%
  mutate(n_tokens = length(encoding$encode(name))) %>%
  ungroup() # 处理完记得取消行分组,不影响后续操作

方法2:用purrr::map_dbl()向量化处理

用map_dbl遍历name列的每个元素,单独计算token长度,这是tidyverse更高效的向量化处理方式:

beatles %>%
  mutate(n_tokens = map_dbl(name, ~ length(encoding$encode(.x))))

两种方法都能避开向量输入的问题,正常计算每个名字的token数量。如果数据量较大,优先选map_dbl,执行效率会更高。

内容的提问来源于stack exchange,提问作者BBJonz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:55:02