R 函数,用于检查数据帧列之间的多个操作组合
以下是原始数据帧的示例(最后提供的数据) 我想写一个函数,从方程中计算R 函数,用于检查数据帧列之间的多个操作组合,r,function,combinations,apply,R,Function,Combinations,Apply,以下是原始数据帧的示例(最后提供的数据) 我想写一个函数,从方程中计算R 我在下面写代码是为了计算R,而N\u l是负责最大R的 R <- function(x){ N_b <- x[1] N_l <- x[2] N_l_seq <- seq(N_l) A <- x[3] x.sqr_sum <- x[4] e <- x[5:12] m <- Multi.Presence$m[N_l_seq] f <- m
R
我在下面写代码是为了计算R
,而N\u l
是负责最大R
的
R <- function(x){
N_b <- x[1]
N_l <- x[2]
N_l_seq <- seq(N_l)
A <- x[3]
x.sqr_sum <- x[4]
e <- x[5:12]
m <- Multi.Presence$m[N_l_seq]
f <- m * (N_l_seq/N_b + A * cumsum(e) / x.sqr_sum)
c(val = max(f), pos = which.max(f))
}
DATA <- cbind(DATA, vars = t(apply(DATA, 1, R)))
因变量m
在以下数据框中定义:
> dput(Multi.Presence)
structure(list(N_l = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), m = c(1.2,
1, 0.85, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65)), row.names = c(NA,
-10L), class = "data.frame")
我不确定这是否是你想要的。我想您应该在函数
R
中使用combn
而不是cumsum
R <- function(x){
N_b <- x[1]
N_l <- x[2]
N_l_seq <- seq(N_l)
A <- x[3]
x.sqr_sum <- x[4]
e <- x[5:12]
m <- Multi.Presence$m[N_l_seq]
f <- m * (N_l_seq/N_b + A * cumsum(e) / x.sqr_sum)
c(val = max(f), pos = which.max(f))
}
DATA <- cbind(DATA, vars = t(apply(DATA, 1, R)))
- 作为第一步,我将
合并到Multi.Presence
,以便您可以读取DATA
相对于m
的相应值N\u l
- 最后,您可以在
中按行执行函数apply
,例如R
更新 我不知道您想如何处理
combn
,但下面是一个更新
R <- function(x){
# browser()
N_l <- x["N_l"]
N_b <- x["N_b"]
N_l_seq <- seq(N_l)
A <- x["A"]
x.sqr_sum <- x["x.sqr_sum"]
e <- x[grepl("e_\\d",names(x))]
m <- Multi.Presence$m[N_l_seq]
f <- m * sapply(N_l_seq,function(k) N_l/N_b + A * max(combn(e,k,sum)) / x.sqr_sum)
c(val = max(f), pos = which.max(f))
}
R你是指排列还是组合?@thomasscoding composition!我会改变的,谢谢!因此,我可以看到您如何使用combn
,这正是我想要的。但是我没有将multi.presence数据框与数据合并的原因是我正在查看N_l_seq
中的所有值。我试着运行代码,但我得到的错误是“combn(e,N_l_seq,sum)中的error:length(m)=1L不是真的”,因此在我的代码中,我将m
保留在不同的数据帧中,并更改您提供的combn(e,N_l_seq,sum)
行,所以我不知道如何在function@MaralDorri你什么意思?“但我没有将multi.presence数据框与数据合并的原因是我正在查看N_l_seq中的所有值”?我有点困惑,因为你在帖子中说你从8个值中选择N_l
求和。N_l
是一个单数,例如5。我想计算R
中的所有值(N_l)
。由于m
依赖于N\u l
我将其作为不同的数据帧保存。因此在N\u l\u seq=c(1,2,3,4,5)的每次迭代中
它选择了正确的m
值。同样,我希望combn
函数每次都向我们提供N_l_seq
的写入。这有意义吗?谢谢!我不知道我可以在另一个函数中编写函数。计算出的R
值比预期的要大,我想澄清一些问题g、 pos=which.max(f))
这个术语应该告诉我N_l_seq
中的哪个术语负责max(f)
,但是对于这个位置输出,我得到了更大的数字,比如30和25,N_l
值都小于10
df <- merge(DATA, Multi.Presence, by = "N_l")
R <- function(x){
N_l <- x["N_l"]
N_b <- x["N_b"]
N_l_seq <- seq(N_l)
A <- x["X_ext"]
x.sqr_sum <- x["x.sqr_sum"]
e <- x[grepl("e_\\d",names(x))]
m <- x["m"]
f <- m * (N_l/N_b + A * combn(e,N_l,sum) / x.sqr_sum)
c(val = max(f), pos = which.max(f))
}
> apply(df,1,R)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
val 0.4704685 0.4704685 0.7475 0.7475 0.7475 0.7475 0.6685714 0.6685714
pos 56.0000000 56.0000000 28.0000 28.0000 28.0000 28.0000 1.0000000 1.0000000
[,9]
val 0.6685714
pos 1.0000000
R <- function(x){
# browser()
N_l <- x["N_l"]
N_b <- x["N_b"]
N_l_seq <- seq(N_l)
A <- x["A"]
x.sqr_sum <- x["x.sqr_sum"]
e <- x[grepl("e_\\d",names(x))]
m <- Multi.Presence$m[N_l_seq]
f <- m * sapply(N_l_seq,function(k) N_l/N_b + A * max(combn(e,k,sum)) / x.sqr_sum)
c(val = max(f), pos = which.max(f))
}