python - 如何在 R 中使用带有网状包的 Python 代码构建 lapply 风格的函数?

标签 python r function lapply reticulate

我在 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'] --> 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)。否则,对象 py 不可用,您无法访问 Python 对象。

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

关于python - 如何在 R 中使用带有网状包的 Python 代码构建 lapply 风格的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66837555/

相关文章:

c - 如何通过比较 C 中的字符串来检查输入是否有效

C++ 更新函数参数

python - 使用模拟 MongoDB 服务器进行单元测试

Python 请求 SSL 证书验证失败,即使添加了 CA 证书

r - 将大写单词转换为标题大小写

r - 在 R (Ubuntu 12.04) 中加载 rJava 时出错

c - GETS - C 不适合我

python - `rcond` 参数将更改为机器精度乘以默认值 `` max(M, N) `` 其中 M 和 N 是输入矩阵维度

python - 用数字替换字符串 numpy 数组

r - 如何在 R 中使用 gsub 将字符串替换为单个反斜杠?