将多个参数传递给从数据框

时间:2017-02-16 18:04:07

标签: r function dataframe

试着简化这个,以便更容易解释。假设你有一个功能:

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]),但我得到了一些摘要。

2 个答案:

答案 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])