R 从对象列表中排除元素

R 从对象列表中排除元素,r,R,我有一个元素列表 all<- list(a,b,c,d,e,f,g,h) 因为列表中的某些元素不存在 all Error: objeto 'all' no encontrado 我想找到一个表达式,从列表中排除非对象,并获得一个仅包含那些存在的对象的列表。我试过这个表达 exists(all) Error en exists(all) : objeto 'all' no encontrado 谢谢你我想这应该适合你 LL <- as.character(substitute(

我有一个元素列表

all<- list(a,b,c,d,e,f,g,h) 
因为列表中的某些元素不存在

all
Error: objeto 'all' no encontrado
我想找到一个表达式,从列表中排除非对象,并获得一个仅包含那些存在的对象的列表。我试过这个表达

exists(all)
Error en exists(all) : objeto 'all' no encontrado

谢谢你

我想这应该适合你

LL <- as.character(substitute(c(a,b,c,d,e,f,g)))    #where a,b,c, etc are your objects
L2 <- LL[which(sapply(ll,exists))]    #checks to see if they exists
final_list <- sapply(L2,get)    #creates list of those objects that do exist

LL你确定你曾经成功创建过
all
对象吗?如果缺少这些对象中的任何一个,则列出的第一个命令应该失败,因此
all
实际上不应该存在。明白,因此我应该在创建列表之前消除不存在的元素。在前面的一个例子中,我删除了不存在的元素,然后创建了列表,但如果可能的话,我想反过来做。你可以用你想要的对象的名称创建一个列表,然后用存在的对象填充一个列表,但是是的,否则就不可能了!我想您在创建
LL
时需要
[-1]
,以避免将
c
也列出。而且,您还可以将所有这些都封装在一个函数中,比如:
list2=function(…)
{
env sure=)我想我会把基础知识扔到那里,让专家来接手()
a<-c(1,2,3)
b<-c('t','r','e')
d<-c('gfd','dgdf','gd')
f<-c(2,45,6)
l2<-as.character(substitute(c(a,b,c,d,e,f)))
> l2
[1] "c" "a" "b" "c" "d" "e" "f"
GOOD<-l2[which(sapply(l2,exists))]
> GOOD
[1] "c" "a" "b" "c" "d" "f"
sapply(GOOD,get)
$c
function (..., recursive = FALSE)  .Primitive("c")

$a
[1] 1 2 3

$b
[1] "t" "r" "e"

$c
function (..., recursive = FALSE)  .Primitive("c")

$d
[1] "gfd"  "dgdf" "gd"  

$f
[1]  2 45  6