R语言:将数据框拆分为向量并批量传入多参数函数
嘿,我完全懂你的痛点——手动列出来df[,1]、df[,2]...实在太麻烦了,尤其是列多的时候!下面给你几个靠谱的解决方案,完美解决自动拆分数据框/矩阵列向量传入函数的需求:
方案1:用原生R的do.call()(最推荐)
do.call()就是干这个活的!它能把一个列表的所有元素,作为单独的位置参数传给目标函数。而数据框本身本质上就是由列向量组成的列表,所以直接把数据框丢进去就行:
# 针对数据框的情况 do.call(myFunction, df)
如果你的输入是矩阵,只需要先把它转成数据框(或者直接转成列表),再用do.call():
# 针对矩阵的情况 do.call(myFunction, as.list(as.data.frame(your_matrix)))
为什么你之前的split()方法不行?
你用split(df, col(df))得到的是一个每个元素都是单列数据框的列表,而不是纯向量。如果你的myFunction期望的是向量输入,自然就会出错啦。
方案2:用tidyverse的purrr::invoke()(适合tidyverse用户)
如果你平时习惯用tidyverse工具链,purrr包里的invoke()是do.call()的替代,用法几乎一样:
library(purrr) # 数据框直接传 invoke(myFunction, df) # 矩阵的话同样先转成数据框/列表 invoke(myFunction, as.list(as.data.frame(your_matrix)))
小提醒
要确认你的myFunction确实是接受多个独立的向量参数(比如定义成myFunction(...)或者myFunction(vec1, vec2, vec3)),而不是只接受一个列表参数。从你手动传df[,1]等可行的情况来看,这个条件肯定是满足的,所以上面的方法都能正常工作~
内容的提问来源于stack exchange,提问作者ozgeneral
相关产品推荐
相关产品推荐

