我努力使用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*
并且值是错误的。
感谢您的帮助!
答案 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时。您将使用获得的值替换此相同的列。请检查一下。