Получить целевой вектор из симплексной оптимизации в R
Я начал использовать R для решения LP-задачи, используя симплексную функцию из библиотеки ("boot"). Когда я пробую следующий код, я получаю целевой вектор только как строку, но не как вектор.
library("boot")
# This example is taken from Exercise 7.5 of Gill, Murray and Wright (1991).
enj <- c(200, 6000, 3000, -200)
fat <- c(800, 6000, 1000, 400)
vitx <- c(50, 3, 150, 100)
vity <- c(10, 10, 75, 100)
vitz <- c(150, 35, 75, 5)
j<-simplex(a = enj, A1 = fat, b1 = 13800, A2 = rbind(vitx, vity, vitz),
b2 = c(600, 300, 550), maxi = TRUE)
xx<-(j["soln"])
print(xx)
Из этого получим фоллинг на выходе
$soln
x1 x2 x3 x4
0.0 0.0 13.8 0.0
Тем не менее, это не векторный объект, поэтому я не могу получить элемент первого измерения с помощью x[1]
, Можете ли вы помочь мне получить результат в виде вектора?
1 ответ
Ваша переменная xx
это список, так что довольно легко вернуть определенное значение внутри него.
Например, если вы хотите x1, вы можете сделать:
xx[["soln"]]["x1"]
или же xx[[1]][1]
Но если вы хотите преобразовать xx
в вектор, вы можете сделать:
xx2 <- unlist(xx)
и тогда у вас есть вектор:
> xx2
soln.x1 soln.x2 soln.x3 soln.x4
0.0 0.0 13.8 0.0
> is.vector(xx2)
[1] TRUE
Если вы не хотите сохранять имена для каждого элемента в векторе, поместите аргумент use.names
в FALSE
:
> xx2 <- unlist(xx, use.names = FALSE)
> xx2
[1] 0.0 0.0 13.8 0.0
> is.vector(xx2)
[1] TRUE