因此,我有一个函数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()
,但我不确定如何使用它。
任何帮助表示赞赏。
答案 0 :(得分:1)
我们可以将apply
与MARGIN=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)