如何在R中构建接收数值作为列名参数的函数?
问题修复:将数值参数作为数据框列名调用
问题背景
需要创建函数,将传入的数值作为数据框的列名使用(因处理Bchron包生成的BchronCalibratedDates对象,其嵌套列表以数字格式的样本ID命名)。现有测试代码如下:
a <- 1:5 dat <- tibble("1" = a, "2" = a*2) test <- function(x) { dat$"x" }
调用test(1)期望输出[1] 1 2 3 4 5,但实际返回NULL并提示警告:Unknown or uninitialized column: 'x'。
修复方案
问题出在dat$"x"的写法:$操作符会直接把引号内的x当作列名字符串,而非解析参数x的实际值。需要改用方括号索引[[ ]],并将数值参数转为字符串(因为数据框的列名是字符串类型的数字),修改后的函数如下:
test <- function(x) { dat[[as.character(x)]] }
调用test(1)即可得到预期输出:[1] 1 2 3 4 5。
补充说明
- 若参数
x本身传入的是字符串(比如test("1")),则无需as.character()转换,直接用dat[[x]]即可。 [[ ]]支持动态解析变量值作为索引,适合这种需要根据参数动态选择列的场景,而$更适合直接引用固定名称的列。
内容的提问来源于stack exchange,提问作者Lauren Pratt
相关产品推荐
相关产品推荐

