2012-10-14 219 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