【问题标题】:extract data from a list without using loop in R从列表中提取数据而不使用 R 中的循环
【发布时间】:2012-10-04 21:32:28
【问题描述】:

我有一个带有行位置的向量 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 行中仅提取第 2 列的值 1910,并对接下来的行执行相同操作

但是当我想这样做时出现错误,可以直接这样做吗?或者我应该有一个循环来一一读取 v 中的位置并填充数据向量,例如:

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

谢谢

【问题讨论】:

  • 也许Index Matrices对你有用
  • 你能在你所谓的“矩阵”上运行class() 吗?如果它说“列表”,那么问题将需要一些编辑......
  • 这是一个列表,抱歉我编辑了问题

标签: r vector matrix


【解决方案1】:

您可以使用sapply,如下:

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

但是,根据您的数据,您可能会得到意外的输出,如 Why is `vapply` safer than `sapply`? 中所述。例如,如果您的某些列表项的长度 = 2 的字符向量,那么这样做更安全:

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

vapply 将为您仔细检查您的假设,如果发现问题,则会出错。

【讨论】:

  • list1 有数据,v 有位置,我看你根本没有使用 v
  • 谢谢@flodel,我忘了放另一个变量,顺便问一下,你知道如何去掉我在新向量中得到的 NA 值吗?
猜你喜欢
  • 2018-02-15
  • 2015-10-02
  • 1970-01-01
  • 2016-10-11
  • 2012-02-18
  • 2021-12-05
  • 2018-02-18
  • 2021-08-15
  • 1970-01-01
相关资源
最近更新 更多