试着简化这个,以便更容易解释。假设你有一个功能:
testfun = function(jID,kID,d){
g=paste0(jID,kID)
date = d
bb=data.frame(g,date)
return(bb)
}
和数据框:
x=data.frame(jID = c("a","b"),kID=c("c","d"),date="20170206",stringsAsFactors = FALSE)
我想将每一行传递给函数输入:
所以第1周期:
testfun(x[1,1],x[1,2],x[1,3]) -> return(bb)
第2周期:
testfun(x[2,1],x[2,2],x[2,3]) -> return(bb)
我尝试过使用mapply(testfun, x[,1],x[,2],x[,3])
,但我得到了一些摘要。
答案 0 :(得分:0)
这是使用dplyr
的解决方案。
关键是按行分组并为每一行运行您的函数。
函数的输出应在新数据集中创建新列,在您使用的值旁边。
library(dplyr)
testfun = function(jID,kID,d){
g=paste0(jID,kID)
date = d
bb=data.frame(g,date)
return(bb)
}
x=data.frame(jID = c("a","b"),kID=c("c","d"),date="20170206",stringsAsFactors = FALSE)
x %>% do(data.frame(., # keep row of your dataset
testfun(.$jID, .$kID, .$date))) # run the function using the values of that row
# jID kID date g date.1
# 1 a c 20170206 ac 20170206
# 2 b d 20170206 bd 20170206
请注意,该流程会为您的某个输入创建一个新列date.1
date
。
答案 1 :(得分:0)
声音就像你只想关闭简化
mapply(testfun, x[,1],x[,2],x[,3], SIMPLIFY=FALSE)
您还可以向量化您的功能
vtestfun <- (Vectorize(testfun, SIMPLIFY=FALSE))
vtestfun(x[,1],x[,2],x[,3])