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

编写生成DataFrame的R函数时遇行不匹配等错误求助

问题:构建R函数生成DataFrame时出现行数不匹配错误

我想写一个R函数,从名为metadata的DataFrame里提取指定列生成新DataFrame,还能通过use_additions参数(TRUE/FALSE)控制是否添加additional_data数据。但调用函数时一直报“arguments imply differing number of rows: 0, 1523”错误,试了各种索引方式都没解决,相关代码和错误信息如下:

make_data = function(metric, use_additions = FALSE){ 
  data = data.frame(my_metric = metadata[['metric']], gender = metadata$Gender , 
                    age = as.numeric(metadata$Age) , use_additions = t(additional_data))
  data = data %>% dplyr::select(my_metric, everything())
  return(data)
}

data = make_data(CR, FALSE) 

错误信息:

Error in data.frame(metric = metadata[["metric"]], gender = metadata$Gender,  : 
  arguments imply differing number of rows: 0, 1523
In addition: Warning message:
In data.frame(metric = metadata[["metric"]], gender = metadata$Gender,  : 
 
Error in data.frame(my_metric = metadata[["metric"]], gender = metadata$Gender, :
arguments imply differing number of rows: 0, 1523

当我把metadata[['metric']]改成metadata[[metric]]时,又出现新错误:

Error in (function(x, i, exact) if (is.matrix(i)) as.matrix(x)[[i]] else .subset2(x, :
object 'CR' not found

问题原因与修正方案

核心问题分析

  1. 行数不匹配错误:

    • metadata[['metric']]是按固定字符串"metric"去查找列,而非你传入的参数metric对应的列,导致返回0行空数据,和metadata$Gender的1523行数据冲突。
    • 不管use_additions参数取值如何,代码都强制加入了t(additional_data),且转置后的additional_data行数大概率和metadata不一致。
  2. CR未找到错误:
    调用函数时make_data(CR, FALSE)里的CR是裸写的,R会将其视为变量查找,但你实际想传入的是列名字符串,必须加引号。

修正后的代码

library(dplyr)

make_data = function(metric, use_additions = FALSE){ 
  # 提取metadata中的基础列
  data = data.frame(
    my_metric = metadata[[metric]],  # 用参数metric动态索引列
    gender = metadata$Gender, 
    age = as.numeric(metadata$Age)
  )
  
  # 根据参数决定是否添加额外数据
  if(use_additions){
    # 确保additional_data行数与data一致,这里假设是列向量/单行数据,需根据实际结构调整
    data = bind_cols(data, additional_data)
  }
  
  data = data %>% dplyr::select(my_metric, everything())
  return(data)
}

# 调用时传入列名字符串
data = make_data("CR", FALSE) 

额外说明

  • 调用函数时必须以字符串形式传递列名(如"CR"),而非裸写变量名;
  • 额外数据的添加逻辑要放在if判断内,仅在use_additions=TRUE时执行;
  • 如果additional_data行数与data不匹配,需先调整其维度(比如截取对应行、按行对齐)后再合并。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:01:35