0

我想peakutils在 R 中使用 Python 包。为此,我使用了该reticulate包。这是我想做的一个例子。

# Load packages
library(data.table)
library(reticulate)

# Set RNG
set.seed(-1)

# Synthetic data function
foo <- function(x) sin(x) * sqrt(x) + rnorm(length(x), 0, 0.1)

# Create data
dt <- data.table(x = seq(0, 10, by = 0.1))
dt$y <- foo(dt$x)

# Import Python library
pu <- import("peakutils")

# Indices pf peaks
ind <- pu$indexes(dt$y, thres = 0.7)

# Have a look at data
plot(dt)
points(dt[ind], col = "red", pch = 19)

在此处输入图像描述

这很棒,并且按预期工作。现在,假设我想更改min_dist参数,根据文档,它是一个整数。我通过min_dist = 3L了,像这样:

# Indices pf peaks now with a larger minimum distance
ind <- pu$indexes(dt$y, thres = 0.7, min_dist = 3L)

并收到以下错误:

py_call_impl(callable, dots$args, dots$keywords) 中的错误:
TypeError: 只有一个元素的整数数组可以转换为索引

它期望一个具有单个元素的数组,该元素是一个整数,但是——据我所知——这正是我要传递的,所以为什么我会收到这个错误?

4

1 回答 1

0

问题在于y论点而不是min_dist论点。下面的解决方案最初发布在GitHubreticulate repo上。

# Load packages
library(data.table)
library(reticulate)

# Set RNG
set.seed(-1)

# Synthetic data function
foo <- function(x) sin(x) * sqrt(x) + rnorm(length(x), 0, 0.1)

# Create data
dt <- data.table(x = seq(0, 10, by = 0.1))
dt$y <- foo(dt$x)

# Import Python library
pu <- import("peakutils")

# Indices pf peaks
ind <- pu$indexes(as.array(dt$y), thres = 0.7, min_dist = 3L)

# Have a look at data
plot(dt)
points(dt[ind], col = "red", pch = 19)

reprex 包(v0.3.0)于 2019 年 10 月 10 日创建

于 2019-10-10T23:23:08.787 回答