使用解析(文本=)

using parse(text= )

我以为我理解了 eval(parse(text = )) 但我收到了一个错误。我有一个名为 plotString 的字符串,它是使用 for 循环构造的。如果我打印出来,它看起来像这样:

plotString
[1] "emo_plot[[1]],sentiment_plot[[1]],emo_plot[[2]],sentiment_plot[[2]],emo_plot[[3]],sentiment_plot[[3]],emo_plot[[4]],sentiment_plot[[4]],emo_plot[[5]],sentiment_plot[[5]],emo_plot[[6]],sentiment_plot[[6]],emo_plot[[7]],sentiment_plot[[7]],emo_plot[[8]],sentiment_plot[[8]],emo_plot[[9]],sentiment_plot[[9]],emo_plot[[10]],sentiment_plot[[10]]"

最终目标是把它作为

中的第一个参数
pairPlot <- ggarrange( eval(parse(text=plotString)) + rremove("x.text"), labels = c("A", "B", "C", "D"), ncol = 6, nrow = 4)

但只是 运行 它在

parse(text=plotString)

给出这个错误

Error in parse(text = plotString) : <text>:1:14: unexpected ','
1: emo_plot[[1]],
                 ^

还有这个

eval(parse(text=plotString))

给,当然一样

Error in parse(text = plotString) : <text>:1:14: unexpected ','
1: emo_plot[[1]],
                 ^

还有这个

pairPlot <- ggarrange( eval(parse(text=plotString)) + rremove("x.text"), labels = c("A", "B", "C", "D"), ncol = 6, nrow = 4)

给,当然一样

Error in parse(text = plotString) : <text>:1:14: unexpected ','
1: emo_plot[[1]],
                 ^

我读到文本需要计算为 R 表达式,我猜 plotString 不是 R 表达式。如果这是问题所在,我怎样才能让 ggarrange() 中加号 (+) 之前的条目变成

emo_plot[[1]],sentiment_plot[[1]],emo_plot[[2]],sentiment_plot[[2]] 

谢谢。

parse() 解析 完整表达式 。也就是说,您传递给它的代码必须是语法上有效的独立 R 代码。你不能传递它片段。即使你能做到,你也不能 eval() 片段;再一次,您传递给 eval() 的表达式必须是独立的、完整的、有效的 R 代码。

我通常会对在代码中使用 eval(parse(…)) 保持警惕;通常是在解决错误的问题。

就您而言,您从哪里获得输入?除非数据来自 R 外部,否则几乎可以肯定,将数据作为表达式列表而不是字符串来存储和操作是更好的解决方案。然后你可以通过 do.call():

使用它
do.call('ggarrange', list_of_plots)