微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有什么方法可以阻止rpy2自动转换所有内容?

如何解决有什么方法可以阻止rpy2自动转换所有内容?

我正在使用rpy2以便能够在Python中使用软件包FMradio。该软件包由用于探索性因素分析的特定管道组成,因此我将函数输出用作下一个函数的输入。但是,此程序包在很大程度上取决于矩阵的列名来进行计算。 numpy2ri和pandas2ri的自动转换会删除矩阵的列名和行名,因此无法使用此程序包。

我认为绕过此问题的最简单方法是不将R矩阵转换为python数组,而仅使用R对象直到我不再需要它为止。有什么方法可以阻止自动转换的发生,而只是在python上处理R对象?

这就是我尝试使用它的方式。 X_filt 一个空向量,因为从R矩阵到numpy.array的转换会删除 correlation 中的列名。 X 必须是函数subSet起作用的矩阵,因此不能将其转换为pandas数据框。

import rpy2.robjects as ro
from rpy2.robjects import pandas2ri
pandas2ri.activate()

from rpy2.robjects.packages import importr
FMradio = importr("FMradio")
stats = importr("stats")


correlation = stats.cor(X,method = "pearson",use = "pairwise.complete.obs")
correlation_filt = FMradio.RF(correlation,t = 0.9)
X_filt = FMradio.subSet(X,correlation_filt)
regular_correlation = FMradio.regcor(X_filt,10,verbose = FALSE)

非常感谢!

解决方法

调用activate()实际上是在要求rpy2转换所有内容。

有关转换的文档概述了转换的工作方式: https://rpy2.github.io/doc/v3.3.x/html/robjects_convert.html#conversion

如果仅需要从pandas func StartRecording() -> String{ // Configure the audio session for the app. let audioSession = AVAudioSession.sharedInstance() try! audioSession.setCategory(.record,mode: .measurement,options: .duckOthers) try! audioSession.setActive(true,options: .notifyOthersOnDeactivation) let inputNode = audioEngine.inputNode // let recordingFormat = inputNode.outputFormat(forBus: 0) inputNode.installTap(onBus: 0,bufferSize: 1024,format: recordingFormat) { (buffer: AVAudioPCMBuffer,when: AVAudioTime) in self.recognitionRequest?.append(buffer) } audioEngine.prepare() try! audioEngine.start() // Create and configure the speech recognition request. recognitionRequest = SFSpeechAudioBufferRecognitionRequest() guard let recognitionRequest = recognitionRequest else { fatalError("Unable to create a SFSpeechAudioBufferRecognitionRequest object") } recognitionRequest.shouldReportPartialResults = true // Create a recognition task for the speech recognition session. // Keep a reference to the task so that it can be canceled. recognitionTask = speechRecognizer.recognitionTask(with: recognitionRequest) { result,error in var isFinal = false if let result = result { // Update the text view with the results. self.recognizedText = result.bestTranscription.formattedString isFinal = result.isFinal } if error != nil || isFinal { // Stop recognizing speech if there is a problem. self.audioEngine.stop() inputNode.removeTap(onBus: 0) self.recognitionRequest = nil self.recognitionTask = nil } } return recognizedText } 的转换,则文档中的相关部分可能就足够了: https://rpy2.github.io/doc/v3.3.x/html/pandas.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。