R for循环具有上/下限/值范围的函数

时间:2017-08-01 23:51:42

标签: r function loops

我努力使用for循环来应用包含值范围的函数" x:y"到数据框的每一行。

这是功能:

FPRfun <- function(A, B, C, P){
  N <- 2 * C - A - B - 1
  lbound <- C - B; ubound <- N
  FPR.summation <-
    ifelse(lbound <= ubound,
           sum(choose(N, lbound:ubound)), 0)
  FPR <- (1 - (FPR.summation / 2^(2 * C - A - B - 1))) * P
  return(FPR)
}

这是我对for循环的尝试:

for(i in dataframe){
  FPR<-FPRfun(A, B, C, P)
  dataframe$FPR<-FPR
}

与没有值范围的函数不同,我得到警告

*In lbound:ubound : numerical expression has 15 elements: only the first used*

并且值是错误的。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

此代码将消除您现在收到的警告。

FPRfun <- function(A, B, C, P){
  N <- 2 * C - A - B - 1
  lbound <- C - B; ubound <- N
  FPR.summation <- mapply(function(i,j,k) ifelse(i<j,sum(choose( k,i:j)),0),lbound,ubound,N)
 FPR <- (1 - (FPR.summation / 2^(2 * C - A - B - 1))) * P
 return(FPR)
}

但问题仍然存在。 A,B,C和P的长度是多少?是长度 是否与数据帧相同?如果没有,那么您将获得错误的结果。它无法将其添加到数据框中。在执行for循环的同时,您只会收到for循环中的最后一个值,因为您每次只是替换相同的列。即,对于i = 1,您将值存储在数据帧$ FPR中,当i = 2时。您将使用获得的值替换此相同的列。请检查一下。