2012-10-14 177 views
1

使用循環我有行位置的矢量v:提取數據,而不作爲R

v<-c(10,3,100,50,...) 

與我想提取一個列表的元素的那些位置,具有列固定的,例如可以假設我的列數爲2,所以我做:

data<-c() 
data<-c(list1[[v]][[2]]) 

列表1具有下列格式的數據:

[[34]] 
     [1] "200_s_at" "483"  "1933"  "3664"   

因此,例如,我想從行342中僅提取值1910,列2,並且對接下來的行執行相同操作

但是當我想這樣做時出錯,是否可以執行它直接?或者我應該有一個循環,以V逐個讀取的位置和填補像數據矢量:

#algorithm 
for i<-1 to length(v) 
    pos<-v[i] 
    data[[i]]<-c(list1[[pos]][[2]]) 
next i 

感謝

+1

也許[Index Matrices](http://cran.r-project.org/doc/manuals/R-intro.html#Index-matrices)對你很有用 –

+1

或[Array Indexing](http:// cran.r-project.org/doc/manuals/R-intro.html#Array-indexing)。 – flodel

+0

你能在你所謂的「矩陣」上運行class()嗎?如果它說「列表」,那麼這個問題將需要一些編輯... – flodel

回答

7

您可以按以下使用sapply

sapply(list1[v], `[`, 2) 

然而,根據您的數據,您可能會得到意想不到的輸出結果,如Why is `vapply` safer than `sapply`?中所述。例如,如果您的某些列表項目的長度爲< 2,該怎麼辦?如果某些列表項不是矢量而是data.frames會怎麼樣?另外,根據列表元素的類別(邏輯,整數,數字,字符),輸出類可能會有所不同。例如,如果你希望你的所有列表項是長度的特徵向量> = 2,那麼它是安全的事:

vapply(list1[v], `[`, character(1), 2) 

其中vapply會仔細檢查你的假設爲你和錯誤,如果它發現一個問題。

+0

list1有數據和v有位置,我沒有看到你在使用v – Layla

+0

對不起,它是固定的。 – flodel

+0

謝謝@ flodel,我忘了放置另一個變量,順便說一下,你會知道如何擺脫我在新矢量中獲得的NA值? – Layla