小编ami*_*itr的帖子

Python asyncio:处理gather()中的异常-文档不清楚?

asyncio.gather文档

如果 return_exceptions 是False(默认),第一个引发的异常会立即传播到等待 on 的任务gather()。aws 序列中的其他等待对象不会被取消而是会继续运行。

但是,从一个简单的测试看来,如果其中一个任务在 return_exceptions 时引发异常,则False所有其他等待对象都将被取消(或者更准确地说,如果我不清楚术语,其他等待对象不会完成它们的工作):

import asyncio

async def factorial(name, number, raise_exception=False):
    # If raise_exception is True, will raise an exception when
    # the loop counter > 3
    f = 1
    for i in range(2, number + 1):
        print(f'  Task {name}: Compute factorial({i})...')

        if raise_exception and i > 3:
            print(f'  Task {name}: raising Exception')
            raise Exception(f'Bad Task {name}')

        await asyncio.sleep(1)
        f *= …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

17
推荐指数
1
解决办法
8942
查看次数

data.table::setorder on data.frame 输入顺序仅排序列

我将 a 传递data.frame给一个使用 对其进行排序的函数data.table::setorder。在排序之前,我正在调用data.table::setDT输入(实际上我需要稍后data.table在输入上调用一些特定函数)。这是我正在使用的功能:

test_order <- function(x) {
  data.table::setDT(x)
  data.table::setorder(x, score)
}
Run Code Online (Sandbox Code Playgroud)

我就是这样称呼它的:

x0 <- data.frame(id = 1:3, score = c(20, 10, 30))
x1 <- test_order(x0)
Run Code Online (Sandbox Code Playgroud)

结果看起来很奇怪:

  • 的类型x0改为a data.table- 看起来还可以;
  • 该列x0$id未修改- 它的地址(使用)保持不变,并且也保持原始顺序data.table::address
  • 该列x0$score也保留在相同的地址,但现在已排序,因此它与列不同步id
  • 结果x1行排序正确;此外,该列与的列score位于同一地址,但该列当然位于不同的地址。这是我得到的:scorex0id
> x0
  id score
1  1    20
2  2    10
3  3    30
> x1 <- test_order(x0)
> …
Run Code Online (Sandbox Code Playgroud)

r data.table

7
推荐指数
0
解决办法
400
查看次数

在 data.table `by` 中使用 `fifelse`,其中测试列是 `by` 的一部分

我想向 a 添加一列,data.table该列是使用 定义的组内的序列by,但对子句中使用的列之一使用条件by。我尝试使用fifelse以下示例:

dt <- data.table::data.table(
  id = c(1, 1, 2, 2, 2, 3),
  clk = c(1, 1, 0, 2, 2, 5),
  val = LETTERS[1:6]
)

dt[, seq_clk := fifelse(clk != 0, seq_len(.N), NA_integer_), by = .(id, clk)]
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误

fifelse(clk != 0, seq_len(.N), NA_integer_) 中的错误:“yes”的长度为 2,但必须为 1 或“test”的长度 (1)。

我期望得到的结果可以通过以下代码实现

dt[, seq_2 := seq_len(.N), by = .(id, clk)][
, seq_clk := fifelse(clk != 0, seq_2, NA_integer_)][
  , seq_2 := NULL]
Run Code Online (Sandbox Code Playgroud)

这使 …

r data.table

3
推荐指数
1
解决办法
474
查看次数

标签 统计

data.table ×2

r ×2

python ×1

python-3.x ×1