R语言如何使用rowwise基于自定义函数创建列表列
错误原因
你的代码存在两处明显错误:
rowwise()不需要传入数据集a作为参数,该函数直接作用于管道传入的上游数据,额外传入参数会触发参数匹配错误。- 你调用
fun(a, b, c)时,第三个参数c在你的原始数据集a中不存在,如果你是笔误要传入固定值,直接替换成对应值即可;如果c是你需要用到的字段,需要先在数据集中补充该列。
正确实现代码
方法1:使用rowwise逐行运算
如果第三个参数z传入固定值,示例如下:
library(dplyr) # 原有数据集和函数 a <- data.frame(a= c(1,2,3), b=c(2,3,4)) fun <- function(q,y,z) { r <- data.frame(a = c(q+y, q, q, y), b= c(q,q,q,z)) r } # 逐行运算生成列表列 b <- a %>% rowwise() %>% mutate(list1 = list(fun(q = a, y = b, z = 1)))
如果第三个参数z需要使用数据集中的字段,先补充对应列再调用即可:
# 先补充c列 a$c <- c(3,4,5) b <- a %>% rowwise() %>% mutate(list1 = list(fun(a, b, c)))
方法2:使用purrr::pmap实现
不需要显式声明逐行运算,代码更简洁:
library(dplyr) library(purrr) a$c <- c(3,4,5) b <- a %>% mutate(list1 = pmap(list(a, b, c), fun))
运行完成后,b$list1的每一个元素都是对应行代入函数生成的data.frame,你可以通过b$list1[[1]]查看第一行的运算结果验证正确性。
内容的提问来源于stack exchange,提问作者bill999
相关产品推荐
相关产品推荐

