使用 R 的可能组合
Possible combinations using R
我已经编辑了我的问题并更改了脚本中的某些行,以明确找到我可以获得输出 1 或 0 的次数。
我有 19 variables.I 尝试了这 19 个变量的可能组合,以给出二进制输出 0 或 1,即 2 的 19 次方 (5,24,288)。但是由于内存有限 space,我无法在 R 中显示所有 5,24,288 种组合的真实情况 table。有什么方法可以找到给出输出 1 和 0 的组合数。下面是脚本,我在其中使用逻辑门 AND 和 OR 给出了以下输入。请给我一些想法或建议,以找出我可以获得值 0 或 1 作为输出的次数
n <- 19
l <- rep(list(0:1), n)
inputs <- expand.grid(l)
len <-dim(inputs)
len <-len[1]
output <- 1;
for(i in 1:len)
{
if((inputs[i,1] == 1 & inputs[i,2] == 1 & inputs[i,3] == 1 & (inputs[i,4] == 1 & inputs[i,5] == 1 | inputs[i,6] == 1 & inputs[i,7] == 0)) | (inputs[i,1] == 1 & inputs[i,2] == 1 & inputs[i,8] == 1 & inputs[i,9] == 1) | (inputs[i,1] == 1 & inputs[i,10] == 0 & inputs[i,11] == 0) |(inputs[i,1] == 1 & inputs[i,12] == 1 & inputs[i,13] == 1 & inputs[i,14] == 1) | (inputs[i,1] == 1 & inputs[i,15] == 1 & inputs[i,16] == 1) | (inputs[i,1] == 1 & inputs[i,17] == 0) | (inputs[i,1] == 1 & inputs[i,18] == 1 & inputs[i,19] == 1)){
output[i] <- 1
}
else
{
output[i] <- 0
}
}
data <- cbind(inputs, output)
write.csv(data, "data.csv", row.names=FALSE)
1048576 并不大。如果您只需要 20 0/1 列,如果您使用整数,则大约需要 80 Mb:
x = replicate(n = 20, expr = c(0L, 1L), simplify = FALSE)
comb = do.call(expand.grid, args = x)
dim(comb)
# [1] 1048576 20
format(object.size(comb), units = "Mb")
# [1] "80 Mb"
在您的问题中,您经常使用 &&
。 &&
适合比较长度为 1 的 。使用 &
进行矢量化比较,因此您不需要 for
循环。
例如:
y = matrix(c(1, 1, 0, 0, 1, 0, 1, 0), nrow = 4)
y[, 1] & y[, 2] # gives the truth table for & applied across columns
# no for loop needed
# R will interpret 0 as FALSE and non-zero numbers as TRUE
# so you don't even need the == 1 and == 0 parts.
看起来你真的在追求所有值都是 1 的组合数。(或者它们都有特定的值。)我不打算在这里给出答案,因为我怀疑这是对于家庭作业,但我会说你不需要编写一行代码来找出它。如果你明白'all possible combinations'的宇宙是什么,逻辑上答案就很清楚了。
我想这就是你想要的:
key <- c(1,0,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1) # based on your if condition
inputs <- expand.grid(rep(list(0:1), 20))
len <- nrow(inputs)
output <- sapply(1:len, function(i) all(inputs[i,]==key))
data <- cbind(inputs, as.numeric(output))
write.csv(data, "data.csv", row.names=FALSE)
虽然,正如其他人强调的那样,key
只能在所有 1048576 行中的一行中找到。
我已经编辑了我的问题并更改了脚本中的某些行,以明确找到我可以获得输出 1 或 0 的次数。
我有 19 variables.I 尝试了这 19 个变量的可能组合,以给出二进制输出 0 或 1,即 2 的 19 次方 (5,24,288)。但是由于内存有限 space,我无法在 R 中显示所有 5,24,288 种组合的真实情况 table。有什么方法可以找到给出输出 1 和 0 的组合数。下面是脚本,我在其中使用逻辑门 AND 和 OR 给出了以下输入。请给我一些想法或建议,以找出我可以获得值 0 或 1 作为输出的次数
n <- 19
l <- rep(list(0:1), n)
inputs <- expand.grid(l)
len <-dim(inputs)
len <-len[1]
output <- 1;
for(i in 1:len)
{
if((inputs[i,1] == 1 & inputs[i,2] == 1 & inputs[i,3] == 1 & (inputs[i,4] == 1 & inputs[i,5] == 1 | inputs[i,6] == 1 & inputs[i,7] == 0)) | (inputs[i,1] == 1 & inputs[i,2] == 1 & inputs[i,8] == 1 & inputs[i,9] == 1) | (inputs[i,1] == 1 & inputs[i,10] == 0 & inputs[i,11] == 0) |(inputs[i,1] == 1 & inputs[i,12] == 1 & inputs[i,13] == 1 & inputs[i,14] == 1) | (inputs[i,1] == 1 & inputs[i,15] == 1 & inputs[i,16] == 1) | (inputs[i,1] == 1 & inputs[i,17] == 0) | (inputs[i,1] == 1 & inputs[i,18] == 1 & inputs[i,19] == 1)){
output[i] <- 1
}
else
{
output[i] <- 0
}
}
data <- cbind(inputs, output)
write.csv(data, "data.csv", row.names=FALSE)
1048576 并不大。如果您只需要 20 0/1 列,如果您使用整数,则大约需要 80 Mb:
x = replicate(n = 20, expr = c(0L, 1L), simplify = FALSE)
comb = do.call(expand.grid, args = x)
dim(comb)
# [1] 1048576 20
format(object.size(comb), units = "Mb")
# [1] "80 Mb"
在您的问题中,您经常使用 &&
。 &&
适合比较长度为 1 的 。使用 &
进行矢量化比较,因此您不需要 for
循环。
例如:
y = matrix(c(1, 1, 0, 0, 1, 0, 1, 0), nrow = 4)
y[, 1] & y[, 2] # gives the truth table for & applied across columns
# no for loop needed
# R will interpret 0 as FALSE and non-zero numbers as TRUE
# so you don't even need the == 1 and == 0 parts.
看起来你真的在追求所有值都是 1 的组合数。(或者它们都有特定的值。)我不打算在这里给出答案,因为我怀疑这是对于家庭作业,但我会说你不需要编写一行代码来找出它。如果你明白'all possible combinations'的宇宙是什么,逻辑上答案就很清楚了。
我想这就是你想要的:
key <- c(1,0,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1) # based on your if condition
inputs <- expand.grid(rep(list(0:1), 20))
len <- nrow(inputs)
output <- sapply(1:len, function(i) all(inputs[i,]==key))
data <- cbind(inputs, as.numeric(output))
write.csv(data, "data.csv", row.names=FALSE)
虽然,正如其他人强调的那样,key
只能在所有 1048576 行中的一行中找到。