R 子集作为函数的列表';s输出,而不将输出声明为变量
从R 子集作为函数的列表';s输出,而不将输出声明为变量,r,list,subset,R,List,Subset,从gtools库中,获取组合(5,2)。这将提供以下输出: > combinations(5,2) [,1] [,2] [1,] 1 2 [2,] 1 3 [3,] 1 4 [4,] 1 5 [5,] 2 3 [6,] 2 4 [7,] 2 5 [8,] 3 4 [9,] 3 5 [10,] 4 5 在不将此输出声明为变量的情况下,我希望从
gtools
库中,获取组合(5,2)
。这将提供以下输出:
> combinations(5,2)
[,1] [,2]
[1,] 1 2
[2,] 1 3
[3,] 1 4
[4,] 1 5
[5,] 2 3
[6,] 2 4
[7,] 2 5
[8,] 3 4
[9,] 3 5
[10,] 4 5
在不将此输出声明为变量的情况下,我希望从此输出中删除第一列中值为1的所有元素,并以与原始输出相同的格式返回结果列表
到目前为止,我已经尝试:
- 类似于答案中建议的公式。例如,
。这将提供与所需数字相似的内容,但输出不是数组。它似乎是一个一维的数字向量(组合(5,2))[(组合(5,2))[,1]>1]
- 通过减号删除不需要的输出。例如,
。它总是返回(组合(5,2))[-组合(5,2)[,1]>1]
整数(0)
函数。这总是为我返回错误,通常抱怨我的一个参数不符合逻辑。我试图通过使用子集
来解决这个问题,但是没有任何帮助
组合
计算
此版本与您第一次尝试的不同之处在于“>1”后面的逗号。您可以这样做
combinations(5,2)[combinations(5,2)[,1]!=1,]
它看起来不太好,但很有效。如果你使用
magrittr
你可以使用
combinations(5,2) %>% .[.[,1]>1,]
这避免了需要重新计算昂贵的组合
计算两次
但为什么要如此努力地避免变量呢?最终,您将使用的内存和计算时间翻了一番。您是否也反对编写函数?为什么不呢
colFilter <- function(x, col, fun) x[fun(x[,col]),]
这样会更有效率
或者一个管道函数将是
withX <- function(x, expr) eval(substitute(expr), list("."=x), parent.frame())
withX <- function(x, expr) eval(substitute(expr), list("."=x), parent.frame())
withX(combinations(5,2), .[.[,1]>1,])