R中数据帧中每一行的迭代函数

时间:2018-11-01 16:11:04

标签: r function

因此,我有一个函数flip.allele(a, b, c, d),该函数接受4个参数,然后根据对这些不同参数的比较返回一个数值。我现在正在尝试编写一个附加功能,该功能将采用该功能,然后将其应用到整个数据帧,因此在数据帧的每一行上迭代原始功能。

所以我要比较的四个值在第2、3、4、5列中,并且我希望它将比较这四个列的值输出到新的第6列中。

这是我目前的尝试:

flip.data.frame = function(df) {

  for (i in nrow(df)) {

    df$flip = flip.allele(df[2], df[3], df[4], df[5])
  }
}

问题是,到目前为止,我所有的尝试(包括该尝试)都意味着,当尝试在数据上使用它时,它将采用前4个值,正确地应用flip.allele函数,然后返回该行的值进入数据框中的每一行。

我知道这是因为我使用df$flip =位的原因,但是我也不知道会是什么解决方案。我看到another thread似乎建议使用apply(),但我不确定如何使用它。

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

我们可以将applyMARGIN=1一起使用。

apply(df[2:5], 1, function(x) flip.allele(x[1], x[2], x[3], x[4]))

或使用pmap

library(tidyverse)
pmap(setnames(df[2:5], letters[1:4]), flip.allele)