3

RPython を使用して、R から Python の文字列に文字列をコピーするのに問題があります。文字列に引用符がない場合の基本的な手順は知っていますが、文字列に引用符がある場合はエラーが発生します。

例えば:

test <- "byte"
python.assign("string",test)
python.exec("print(string)")

正常に動作し、次のように出力されます: byte

でも、

test <- "'byte'"
python.assign("string",test)

エラーが発生します:

File "<string>", line 2
    string =' [ "'byte'" ] '
                     ^
SyntaxError: invalid syntax

引用符をエスケープしようとすると:

test <- "\'byte\'"
python.assign("string",test)

同じエラー:

File "<string>", line 2
    string =' [ "'byte'" ] '
                     ^
SyntaxError: invalid syntax

または、内部の一重引用符を二重引用符に変更した場合:

test <- "\"byte\""
python.assign("string",test)
Error in python.exec(python.command) : 
  Expecting , delimiter: line 1 column 6 (char 5)

私が見逃しているもの、またはどこを見るべきかについてのアイデアはありますか?

ありがとうございました

4

2 に答える 2

0

@matandked から借用すると、一重引用符を次のように置き換えることができchr(39)ますgsub

library(rPython)

test <- "'byte'"

python.assign("string", gsub("\\'", "' + chr(39) + '", test))
python.get("string")

# [1] "'byte'"

意図しない結果が生じる可能性がありますがpython.assign、同様の方法で変更できます。

python.assign <- function (var.name, value, ...) 
{
  value <- gsub("\\'", "' + chr(39) + '", value) ## Added this line...
  value <- toJSON(value, collapse = "", ...)
  python.command <- c(paste(var.name, "='", value, "'", sep = " "), 
                      paste(var.name, "= json.loads(", var.name, ")", sep = ""), 
                      paste("if len(", var.name, ") == 1:", sep = ""), paste("    ", 
                                                                             var.name, "=", var.name, "[0]"))
  python.command <- paste(python.command, collapse = "\n")
  python.exec(python.command)
  invisible(NULL)
}


## Now there's no need to substitute single quotes:
python.assign("string", test)
python.get("string")

# [1] "'byte'"
于 2016-04-27T01:20:21.043 に答える