不使用R中的循环从列表中提取数据

不使用R中的循环从列表中提取数据,r,vector,matrix,R,Vector,Matrix,我有一个向量v和行位置: v<-c(10,3,100,50,...) 例如,我只想从第342行第2列中提取值1910,并对下一行执行相同的操作 但是当我想这样做的时候,我犯了一个错误,可以直接这样做吗?或者我应该有一个循环,一个接一个地读取v中的位置并填充数据向量,如: #algorithm for i<-1 to length(v) pos<-v[i] data[[i]]<-c(list1[[pos]][[2]]) next i #算法 对于i您可以

我有一个向量v和行位置:

v<-c(10,3,100,50,...)
例如,我只想从第342行第2列中提取值1910,并对下一行执行相同的操作

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

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

对于i您可以使用以下
sapply

sapply(list1[v], `[`, 2)
但是,根据您的数据,您可能会得到意外的输出,如中所述。例如,如果某些列表项的长度小于2怎么办?如果某些列表项不是矢量而是data.frames,该怎么办?此外,输出类可能因列表元素的类别(逻辑、整数、数字、字符)而异。例如,如果您希望所有列表项都是长度>=2的字符向量,则更安全的做法是:

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

其中,
vapply
将为您重新检查您的假设,如果发现问题,则会出错。

您可以使用
sapply
,如下所示:

sapply(list1[v], `[`, 2)
但是,根据您的数据,您可能会得到意外的输出,如中所述。例如,如果某些列表项的长度小于2怎么办?如果某些列表项不是矢量而是data.frames,该怎么办?此外,输出类可能因列表元素的类别(逻辑、整数、数字、字符)而异。例如,如果您希望所有列表项都是长度>=2的字符向量,则更安全的做法是:

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

其中,
vapply
将为您重新检查您的假设,如果发现问题,则会出错。

可能对您有用。您可以在假定的“矩阵”上运行
class()
?如果上面写着“列表”,那么这个问题需要编辑一下…这是一个列表对不起,我编辑了这个问题可能对你有用。你能在假设的“矩阵”上运行
class()
?如果上面写着“列表”,那么这个问题需要编辑一下…这是一个列表很抱歉我编辑了这个问题列表1有数据,v有位置,我看不出你在使用v谢谢@flodel,我忘了放另一个变量,顺便问一下,你知道如何去掉我在新向量中得到的NA值吗?读这个-列表1有数据,v有位置,我看不出你在使用v。谢谢@flodel,我忘了放另一个变量,顺便问一下,你知道如何去掉我在新向量中得到的NA值吗?读这个-