我有一个带行位置的向量v:
v<-c(10,3,100,50,...)
使用那些位置我想提取列表的元素,修改列,例如让我假设我的列号是2,所以我在做:
data<-c()
data<-c(list1[[v]][[2]])
list1具有以下格式的数据:
[[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
由于
答案 0 :(得分:7)
您可以使用sapply
,如下所示:
sapply(list1[v], `[`, 2)
但是,根据您的数据,您可能会收到意外的输出,如Why is `vapply` safer than `sapply`?中所述。例如,如果您的某些列表项的长度大于&lt; 2?如果某些列表项不是向量而是data.frames会怎么样?此外,输出类可能会根据列表元素的类别(逻辑,整数,数字,字符)而有所不同。例如,如果您希望所有列表项都是长度> = 2的字符向量,那么更安全:
vapply(list1[v], `[`, character(1), 2)
其中vapply
会仔细检查您的假设,如果发现问题则会出错。