[英]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.