为什么R的purrr::map()会尝试将输出结果转换为函数?
问题解答
错误根源
你为purrr::map()的.f参数传值时写法错误:
- 你写的
.f = test()会让R立即执行test函数,将它的返回值NA(逻辑型变量)传入.f参数 - 而
map()要求.f必须接收函数对象本身,不是函数执行后的返回结果,因此会抛出「无法将逻辑向量转换为函数」的报错。
修正方法
直接传入函数名,去掉函数名后的括号即可:
a <- map(.x = 1:2, .f = test)
运行后会得到预期的包含2个NA的列表结果:
> a [[1]] [1] NA [[2]] [1] NA
拓展提示
如果你使用的自定义函数需要传入除遍历变量.x之外的固定参数,直接在map()的参数列表末尾追加即可,不需要写在.f的括号中:
# 示例:带额外参数的函数 test2 <- function(x, threshold) { if (x > threshold) return(x) return(NA) } # 固定给threshold传值1的正确写法 a2 <- map(.x = 1:2, .f = test2, threshold = 1)
内容的提问来源于stack exchange,提问作者Christopher Carroll Smith
相关产品推荐
相关产品推荐

