r - 对作为函数输出的列表进行子集化,而不将输出声明为变量

标签 r list subset

gtools库中,获取combinations(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 的所有元素,并以与原始输出。

到目前为止,我已经尝试过:

  • 类似于 this 中建议的配方回答。例如,(combinations(5,2))[(combinations(5,2))[,1]>1]。这给出了类似于所需数字的内容,但输出不是数组。它似乎是一个一维数字向量。
  • 通过减号删除不需要的输出。例如,(combinations(5,2))[-combinations(5,2)[,1]>1]。这始终返回integer(0)
  • 子集函数。这总是给我返回错误,通常提示我的论点之一不合逻辑。我尝试使用 which 来解决这个问题,但这并没有帮助。

我还有哪些其他选择?

最佳答案

如果您使用magrittr,您可以使用

combinations(5,2) %>% .[.[,1]>1,]

这避免了重新计算昂贵的组合两次的需要。

但是为什么要这么努力避免变量呢?最终使用的内存和计算时间都会加倍。您也反对编写函数吗?为什么不呢

colFilter <- function(x, col, fun) x[fun(x[,col]),]

然后你就可以做

colFilter(combinations(5,2), 1, function(x) x>1)

这会更有效率。

或者管道函数将是

withX <- function(x, expr) eval(substitute(expr), list("."=x), parent.frame())

这允许您编写一个表达式,您传入的值可以由您希望计算的表达式中的 . 引用。

withX(combinations(5,2), .[.[,1]>1,])

关于r - 对作为函数输出的列表进行子集化,而不将输出声明为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61445465/

相关文章:

r - 有没有办法保持对 ggplot2 中大小比例的绝对控制

r - 将日志符号放入 ggplot2 文本中

r - 查找(并返回)满足(逻辑)测试的列表的第一个元素

r - Knitr - 在主文档中生成图片,在附录中呈现

r - 有没有更高效的搜索算法

python - 多行数组或列表语法错误

Python 只保留列表中的字母数字单词

C++ 数组列表或 vector ?

r - 对满足条件的多个列进行子集化

mysql - 求和子集查询