如何解决如何在 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 举报,一经查实,本站将立刻删除。