繁体   English   中英

如何在ZE1E1D3D3D40573127E9E9E0480CAF127E9E480CAF126D6Z中构建Lapply风格的ZC1C425268E68385D1AB5074C174F14F14F14F1283D6Z与ZA77F5F35426B927411FCC927411B5561B5561B5561B5561B551B556B561B5561B556B561B56B56B56B56B56B56B56B56B56B56B56B56B56B56B56B56B56B56B56B56B56B56B56EF

[英]How to build a lapply-style function in R with Python code inside with package reticulate?

我在 R 中构建了一个简单的翻译 function ,里面有 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'] --> text 必须是最大 5000 个字符的有效文本,否则无法翻译

然而,很明显这不是最大字符的问题......

非常感谢您的帮助 !

这个版本可以在我的电脑上使用名为“rprog”的 conda 环境。

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)很重要。 否则,object py将不可用,并且您无法访问 Python 对象。

Instead of calling an R function, you create a Python function, and call that function from R.

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM