我创建了一个函数,该函数要计算(几个)数据向量。
实际上,对于一个变量,vctor的范围应为(1:100),而其他变量依次保持不变。
该函数是:EI <- function(x,y,z) {(x+y)/(2*(2*x+y)+z)}
我的问题是,x + y + z的总和必须限制为100。而且我不知道如何告诉它该函数。例如,如果x = 20
,y
只能取从值0:80
,即,(100-20),和z可以从0 takey值:100-(X + Y)。
我使用了以下代码,其中z不被视为全部。我以为,我至少会得到一个大向量,但我得到的只是一个数字:
for(x in 1:100) {
for(y in 0:(100-x)) {
for(z in 0:(100-(x+y))) {
v1 <- c(EI(x,y,z))
}
}
}
我需要告诉函数EI(),x + y + z的总和始终为100。有人知道如何解决此问题吗?
如果要创建矢量,则需要执行以下操作:
v1 <- c()
for(x in 1:100) {
for(y in 0:(100-x)) {
for(z in 0:(100-(x+y))) {
v1 <- c(v1, EI(x,y,z))
}
}
}
不幸的是,这会很慢(因为在每个步骤中您都在重新分配新的向量),更好的选择是从分配具有适当大小的向量开始:
v1 <- numeric(171700)
k <- 0
for(x in 1:100) {
for(y in 0:(100-x)) {
for(z in 0:(100-(x+y))) {
k <- k + 1
v1[k] <- EI(x,y,z)
}
}
}
您也可以使用sapply
函数编写相同的内容,这会更快一些:
v1 <- unlist(sapply(1:100,
function(x) {
unlist(sapply(0:(100-x),
function(y) {
sapply(0:(100-(x+y)),
function(z) {EI(x,y,z)}) }))}))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句