我有一些关于使用[]
运算符在R中对命名列表进行子集化的问题:
例如,请考虑列表formals <- list(x = DOUBLE, y = DOUBLE, z = NULL)
。在此示例中,DOUBLE
被视为R中的符号。
1)我应该如何检索所有不等于NULL
的元素。我尝试formals[formals != NULL]
,但这只返回list
类型没有成员的对象。
2)我应该如何检索名称满足条件的元素。例如,我如何获得名称不是z
的所有元素?我可以使用names(formals)
,但这很麻烦,我希望使用[]
快速解决。
答案 0 :(得分:2)
第一个问题的另一个选择:
Filter(Negate(is.null), formals)
对于第二种情况,您必须使用names
。这是一种方式:
formals[names(formals) != 'z']
formals
实际上是R中的一个函数。在命名变量时最好避免使用函数名。
答案 1 :(得分:1)
这适用于您的第一个问题:
formals[!unlist(lapply(formals, is.null))]
我认为你不能避免在第二个问题中使用names
。