编写生成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
问题原因与修正方案
核心问题分析
行数不匹配错误:
metadata[['metric']]是按固定字符串"metric"去查找列,而非你传入的参数metric对应的列,导致返回0行空数据,和metadata$Gender的1523行数据冲突。- 不管
use_additions参数取值如何,代码都强制加入了t(additional_data),且转置后的additional_data行数大概率和metadata不一致。
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
相关产品推荐
相关产品推荐

