【问题标题】:Iterating function over every row in data frame in R在R中数据框中的每一行上迭代函数
【发布时间】:2019-04-05 21:42:05
【问题描述】:

所以我有一个函数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(),但我不完全确定如何使用它。

任何帮助表示赞赏。

【问题讨论】:

    标签: r function


    【解决方案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)
    

    【讨论】:

    • 对于前一种可能性,应该是你写的还是你的意思是:apply(df[2:5], 1, flip.allele(df) flip.allele(df[1], df[2], df[3], df[4])) 如果是你写的,那我不完全确定是什么function(x) 部分正在做,你能解释一下吗?同样,pmap 到底在做什么?
    • @Sabor117 根据您在帖子中的描述,您想为每一行应用该功能。使用列的值。 apply 正在这样做。它循环遍历列 2:5 的行并应用 flip.allele 函数
    猜你喜欢
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 2017-09-19
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多