在R中嵌套python

2024-04-25 23:54:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用R应用python代码。但是,由于R语法转义引号,我得到了一个错误。这段代码直接在bash中工作。你知道吗

df <- 'anm1 sam1 TT GG AA BB'
df <- read.table(text=df, header=F)
write.table(df, "df.txt", col.names=F, row.names=F, quote=F)

在bash中:

python -c "import sys; print('\n'.join(' '.join(c) for c in zip(*(l.split() for l in sys.stdin.readlines() if l.strip()))))" < df.txt > dfout.txt

cat dfout.txt

anm1
sam1
TT
GG
AA
BB

当试图将其嵌套在R中时:

system("python -c \"import sys; print('\n'.join(' '.join(c) for c in zip(*(l.split() for l in sys.stdin.readlines() if l.strip()))))\" < df.txt > dfout.txt")

>     File "<string>", line 1
>         import sys; print('
>                           ^
>     SyntaxError: EOL while scanning string literal

有什么办法让语法在这里起作用吗?你知道吗


Tags: 代码inimporttxtbashdfforsys
1条回答
网友
1楼 · 发布于 2024-04-25 23:54:25

在尝试运行文本之前,应该使用shQuote对文本进行转义,特别是如果文本中可能存在变量数据的话。但是,至少您需要避开文本中的反斜杠:

system("python -c \"import sys; print('\\n'.join(' '.join(c) for c in zip(*(l.split() for l in sys.stdin.readlines() if l.strip()))))\" < df.txt > dfout.txt")

如果您使用system2,shQuote将自动完成,并且您可以使用内置工具进行输入重定向

cmd <- "python"
args <- c(
    "-c",
    "\"import sys; print('\\n'.join(' '.join(c) for c in zip(*(l.split() for l in sys.stdin.readlines() if l.strip()))))\""
)
system2(cmd, args, stdout="dfout.txt", stdin="df.txt")

相关问题 更多 >