使用df_col指定列类型读取Google Sheet(googlesheets4)报错求助
解决googlesheets4读取指定列类型的报错问题
错误原因
read_sheet()的col_types参数有两种合法传入形式:
- 单个紧凑字符串,每个字符对应一列的类型缩写(比如
"cdl"代表字符型、数值型、逻辑型) - 长度与目标Sheet列数完全匹配的字符向量,每个元素是列类型的全称或缩写
你遇到的错误是因为传入的df_col$col_type是长度为3的向量,但函数此时期望单个字符串(大概率是你的Sheet列数与向量长度不匹配,或者参数格式不符合要求)。
解决办法
方法1:将类型向量拼接为单个字符串
如果df_col$col_type存储的是单字符类型缩写(比如"c"、"d"、"l"),直接用paste0()拼接成紧凑字符串:
# 拼接类型向量为单个字符串 col_types_spec <- paste0(df_col$col_type, collapse = "") # 读取Sheet gs1_df <- read_sheet(ss = "gs1", sheet = "Sheet1", col_types = col_types_spec)
方法2:确保类型向量长度与Sheet列数一致
如果df_col$col_type存储的是完整类型名称(比如"character"、"double")或缩写,先确认向量长度和目标Sheet的列数完全相同,再直接传入:
# 先获取目标Sheet的列数(可选验证步骤) sheet_cols_count <- ncol(range_read(ss = "gs1", sheet = "Sheet1", n_max = 0)) stopifnot(length(df_col$col_type) == sheet_cols_count) # 读取Sheet gs1_df <- read_sheet(ss = "gs1", sheet = "Sheet1", col_types = df_col$col_type)
方法3:用readr::cols()构造类型规范
如果需要更灵活的配置(比如指定部分列类型,其他自动推断),可以将df_col转换为readr::cols()对象(前提是df_col包含列名col_name和对应类型col_type两列):
# 构造cols对象 col_spec <- do.call(readr::cols, setNames(df_col$col_type, df_col$col_name)) # 读取Sheet gs1_df <- read_sheet(ss = "gs1", sheet = "Sheet1", col_types = col_spec)
内容的提问来源于stack exchange,提问作者Ant
相关产品推荐
相关产品推荐

