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

如何在 R 中用 Python 代码和包 reticulate 构建一个 lapply 风格的函数?

如何解决如何在 R 中用 Python 代码和包 reticulate 构建一个 lapply 风格的函数?

我用 R 语言构建了一个简单的翻译函数,里面有 Python 代码。它适用于一个字符串。但是应该如何将它应用于字符串列表?

string <- c("cat")
string <- c("cat","dog")
translations.df <- TranslateEnglishStringTofrenchString(string)
View(translations.df)

TranslateEnglishStringTofrenchString <- function(string){
  functionToApply <- function(string){
    reticulate::py_run_string("from deep_translator import GoogleTranslator")
    reticulate::py_run_string("translatedString = GoogleTranslator(source='en',target='fr').translate(r.string)")
    translatedString <- py$translatedString
    .df <- data.frame(string,translatedString)
    return(.df)
  }
  toReturn.df <- do.call(rbind,lapply(string,functionToApply))
  return(toReturn.df)
}

目前,它返回以下错误

py_run_string_impl(code,local,convert) 中的错误: NotValidPayload: ['cat','dog'] --> 文本必须是最大5000个字符的有效文本,否则无法翻译

尽管如此,很明显这里不是最大字符数的问题...

非常感谢您的帮助!

解决方法

这个版本在我的电脑上运行,conda 环境叫做“rprog”。

library(reticulate)
use_condaenv("rprog",required = TRUE)
py_run_string(
"
from deep_translator import GoogleTranslator
def google_translator(string):
    return GoogleTranslator(source='en',target='fr').translate(string)
"
)
lapply(c("hello","coffee"),py$google_translator)

[[1]]
[1] "Bonjour"

[[2]]
[1] "café"

调用 library(reticulate) 很重要。否则,对象 py 将不可用并且您无法访问 Python 对象。

不是调用 R 函数,而是创建一个 Python 函数,然后从 R 调用该函数。

,

试试lapply(c("cat","dog"),FUN = TranslateEnglishStringToFrenchString)

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