Получить целевой вектор из симплексной оптимизации в 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
Другие вопросы по тегам