Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 子集作为函数的列表';s输出,而不将输出声明为变量_R_List_Subset - Fatal编程技术网

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)
  • 子集
    函数。这总是为我返回错误,通常抱怨我的一个参数不符合逻辑。我试图通过使用
    来解决这个问题,但是没有任何帮助
我的其他选择是什么?

这可以:

组合(5,2)[组合(5,2)[,1]>1,] #> [,1] [,2] #> [1,] 2 3 #> [2,] 2 4 #> [3,] 2 5 #> [4,] 3 4 #> [5,] 3 5 #> [6,] 4 5
但是请记住,它会执行两次
组合
计算

此版本与您第一次尝试的不同之处在于“>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,])