1

我有一个带有行位置的向量 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

谢谢

4

1 回答 1

7

您可以使用sapply如下:

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

但是,根据您的数据,您可能会得到意外的输出,如为什么 `vapply` 比 `sapply` 更安全?. 例如,如果您的某些列表项的长度 < 2 怎么办?如果某些列表项不是向量而是 data.frames 怎么办?此外,输出类可能会根据列表元素的类(逻辑、整数、数字、字符)而有所不同。例如,如果您希望所有列表项都是长度 >= 2 的字符向量,那么这样做更安全:

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

wherevapply将为您仔细检查您的假设,并在发现问题时出错。

于 2012-10-14T21:41:32.160 回答