2017-06-29 23 views
0

我開始使用R來解決使用庫中單純形函數的LP問題(「boot」)。當我嘗試下面的代碼時,我只將目標矢量作爲字符串獲取,而不是作爲矢量。從R中的單純形優化中獲得目標向量

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) 

從這得到folling輸出

$soln 
x1 x2 x3 x4 
0.0 0.0 13.8 0.0 

然而,這不是一個矢量對象,所以我無法通過使用x[1]得到第一個維度的元素。你能幫我把結果作爲一個載體嗎?

回答

2

您的變量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 

如果您不想保留載體中每個元件的名稱,請將arg use.names設置爲FALSE

> xx2 <- unlist(xx, use.names = FALSE) 
> xx2 
[1] 0.0 0.0 13.8 0.0 

> is.vector(xx2) 
[1] TRUE