2015-02-11 58 views
0

我正在嘗試在R中創建(矢量)對象。因此,我想實現,我沒有先指定對象的名稱。例如,如果我有一個長度爲3的列表,我想創建對象p1p3,如果我有一個長度爲10的列表,則必須創建對象p1p10。長度應該是任意的,而不是先驗確定的。如何使用「未知名稱」在R中創建對象?

感謝您的幫助!

回答

2

我想這樣做的正確方法是考慮列表p = list(),然後您可以使用p[[i]]i一樣大,只要您希望沒有指定任何長度。

然後,一旦你的列表被填滿,你可以將其重命名:最後names(p) = paste0("p",c(1:length(p)))

,如果你想獲得直接訪問所有的pi變量,你加attach(p)

+0

是的,我也在想這個,但是我希望在後面的分析中使用變量作爲'glm'函數中的預測變量,這使得它有點困難。我需要這個逐步建模模型。 – tnaake 2015-02-11 09:50:34

+1

如果所有向量的長度都等於'l',爲什麼不使用矩陣:'mat = matrix(nrow = l)',然後用'cbind'填充它。最後,使用'as.data.frame',每列將有一個名稱'Vi' – clemlaflemme 2015-02-11 09:59:29

1

這是怎樣的一個黑客,但你可以做以下

short_list <- list(rnorm(10),rnorm(20),1:3) 
long_list <- c(short_list,short_list) 

paste0("p",seq_along(short_list)) 

mapply(assign, paste0("p",seq_along(short_list)), short_list, MoreArgs = list(envir = .GlobalEnv)) 

結果:

> p3 
[1] 1 2 3 

你可以這樣做long_list

我沒有看到一個統計模型,你將需要這個。更好地開始使用列表short_listdata.frame的直接。

PS如果你只是想用它,你可能想在[R學習formula的GLM。
glm(y~., data=your_data)將數據框中未命名爲的所有列作爲迴歸因子。也許這有幫助。

+0

感謝評論'glm'。 'data.frame'的技巧幫助了很多! – tnaake 2015-02-11 10:13:22

0

assign(也可能是attach)通常表示您尚未達到「Rish」版本的代碼。考慮到你需要建模:如果你的$ p_1 \ cdot p_n $屬於同一類型,你可以把它們放到一個矩陣中(在data.frame的列中;對於建模它們總是需要是相同的長):

df$matrix <- p.matrix 

如果直接創建data.frame,你需要確保基質不會擴展到data.frame列:

df <- data.frame (matrix = I (matrix), ...) 

然後glm (y ~ matrix, ...)會工作。

有關此技術的示例,請參閱包plshyperSpecpls paper in the Journal of Statistical Software

相關問題