2011-11-16 134 views
0

我在尋找79列,併爲每列創建一個唯一變量。 我可以手動創建子集的變量:將列分隔爲變量

v1 <- x[1] 
    v2 <- x[2] 
    etc. 

我想知道是否/知道有一個更快的方法來做到這一點。我只是不確定如何。 現在我有:

test <- matrix(rep(1,79), nrow = 1, ncol = 79) 
    c2v <- function(test){ 
     for (i in c(1:79){ 
      v[i] <- test[i] 
     } 
     return(v[i]) 
    } 
    c2v(test) 

感謝一如既往的幫助!

喬恩

+0

這個問題需要一些認真的工作。除了使你編寫的代碼變得毫無意義的拼寫錯誤,你需要提供一個更完整的解釋,說明你正在努力完成什麼以及爲什麼。 – joran

回答

2

什麼是這樣的:

test <- matrix(rep(1,79), nrow = 1, ncol = 79) 

for (i in 1:ncol(test)) { 
    temp <- (paste(c("v",i), collapse="")) 
    assign(temp,test[i]) 
} 

我敢肯定,它可以被重新配置,以擺脫循環的,但這應該工作。

未來我編輯我過去的錯誤:

像下面可能是一個更適當的非循環方案。

list2env(as.data.frame(test),envir=.GlobalEnv) 

它可能仍然是更好的做法與data.framelist工作比分手個別載體。

+0

矢量化矢量化矢量化。 R中的循環效率非常低。 – Maiasaura

+0

@Maiasaura - 我意識到這一點,但我不能爲我的生活考慮如何在這個階段刪除循環。我在做這個工作。 – thelatemail

+2

擔心避免'for'循環可以像其他任何事情一樣被過度使用。作爲練習很有趣,但在這種情況下,我懷疑值得強調的僅僅是79列的循環。 – joran

0
library(reshape) 
    new_data= melt(data, id.vars=1) 
    # Assuming the first column is the ID variable. 
    #If you have more than one, you can specify a range like 1:4