R 使用apply在函数中添加条件

R 使用apply在函数中添加条件,r,function,dataframe,conditional-statements,R,Function,Dataframe,Conditional Statements,我想写一个条件函数来应用于我的数据帧 现有的职能是: Proposed <- function(N_b,N_l,m,A,x.sqr,e_1,e_2,e_3,e_4,e_5,K_g,a,b,c,d) { e <- data.frame(e_1,e_2,e_3,e_4,e_5,N_l) ee <- e[e != 0] CSi <- m * ((N_l/N_b) * ((a*K_g)^b) + ((A * apply(ee,1,functi

我想写一个条件函数来应用于我的数据帧

现有的职能是:

Proposed <- function(N_b,N_l,m,A,x.sqr,e_1,e_2,e_3,e_4,e_5,K_g,a,b,c,d) {
  e <- data.frame(e_1,e_2,e_3,e_4,e_5,N_l)
  ee <- e[e != 0]
  CSi <- m * ((N_l/N_b) * ((a*K_g)^b) + 
            ((A * apply(ee,1,function(v) max(combn(v[1:ncol(ee)],v["N_l"],sum))))
              / x.sqr) * ((c*K_g)^d))
  return(CSi)
}
max(combn(v,n,sum))
sum(tail(v,n))
相同,无需
combn
。比如说,

v
第0条)
#浏览[2]>
法令
#A
#假的
#浏览[2]>
排序(x[-(1:2)],递减=递减)
#e_4 e_3 e_5 e_2 e_1
# -14.2  -2.2   0.0   9.8  21.8 
好的,在这一行中,
A
小于0,所以我们需要
N_l
(2)最低的值,所以当我们对它们进行排序时,最低的值是第一个

#浏览[2]>
头部(排序(x[-(1:2)],递减=递减),x[2])
#e_4 e_3
# -14.2  -2.2 
#浏览[2]>
总和(头(排序(x[-(1:2)],递减=递减),x[2]))
# [1] -16.4
我们将重复第二行,其中我将
A
更改为正值(现在
N\u l
为4):

#在中调试:乐趣(newX[,i],…)
#在#1处调试:{
#第0条)
#总和(头(排序(x[-(1:2)],递减=递减),x[2]))
# }
x
#一个N_l e_1 e_2 e_3 e_4 e_5
#  12.0   4.0  21.8   9.8  -2.2 -14.2   0.0 
第0条)
法令
#A
#真的
排序(x[-(1:2)],递减=递减)
#e_1 e_2 e_5 e_3 e_4
#  21.8   9.8   0.0  -2.2 -14.2 
头部(排序(x[-(1:2)],递减=递减),x[2])
#e_1 e_2 e_5 e_3
# 21.8  9.8  0.0 -2.2 
总和(头(排序(x[-(1:2)],递减=递减),x[2]))
# [1] 29.4

重复一遍。(如果您在控制台上执行此操作,请重新加载/重新定义函数,或调用
undebug(func2)

为什么要创建
data.frame
?如果您的值都是数字,那么
矩阵
要快得多,第二行
e[e!=0]
创建一个向量,该向量是框架的列第一个未列出的向量。因此,
ee
没有维度,因此
apply(ee,1,…)
没有意义(并且应该
Error
)。您可能需要提供示例数据和预期输出才能对此有所帮助。这对我来说似乎很简单。您是否尝试过使用if语句?如果是,为什么不起作用?@r2evans对于某些行,某些E_1、E_2等列具有零项。我不想在
c的考虑中包含doombn
函数。我只去了data.frame,因为这是我在
combn
使用示例中看到的示例。@r2evans我上传了一个示例dataframe@LucasDeAbreuMaia我得到了一个错误,我认为r2evans指的是这个错误。使用
nls
应用它的错误是apply(ee,1,function(v)min(combn(v))中的错误[1:ncol(ee)],v[“N_l”],sum)):dim(X)必须具有正长度
dput(DATA)
structure(list(N_l = c(2, 4, 2, 4, 1, 2, 1, 3), N_b = c(5, 5, 
5, 5, 5, 5, 5, 5), m = c(1, 0.65, 1, 0.65, 1.2, 1, 1.2, 0.85), 
A = c(-12, -12, -15, -15, -9, -9, -9, -9), x.sqr = c(1440, 
1440, 2250, 2250, 810, 810, 810, 810), e_1 = c(21.8, 21.8, 
29, 29, 14.6, 14.6, 14.6, 14.6), e_2 = c(9.8, 9.8, 17, 17, 
2.6, 2.6, 2.6, 2.6), e_3 = c(-2.2, -2.2, 5, 5, -9.4, -9.4, 
-9.4, -9.4), e_4 = c(-14.2, -14.2, -7, -7, 0, 0, 0, 0), e_5 = c(0, 
0, -19, -19, 0, 0, 0, 0), K_g = c(6340598.65753794, 6340598.65753794, 
6429472.98493414, 6429472.98493414, 6296482.86883766, 6296482.86883766, 
8140521.8248051, 8140521.8248051)), row.names = c(20L, 40L, 
60L, 80L, 100L, 120L, 140L, 160L), class = "data.frame")