如何在Quarto的ojs代码块中使用R代码块创建的dataframe?
在Quarto中直接传递R数据框到Observable代码块
完全可以实现,不需要导出CSV文件。Quarto提供了两种简洁的方式来即时传递R创建的数据框到ojs代码块:
方法1:在ojs中直接引用R对象
在Observable代码块里使用!r语法,直接引用R代码块中定义的对象。Quarto会自动将R对象序列化为JSON并传递给Observable运行时。
示例:
df = data.frame( x = 1:10, y = 2:11 )
// 获取R中的df数据框 const df = !r df; // 验证数据(可选) console.log(df); // 示例:用Plot绘制散点图 Plot.plot({ marks: [ Plot.dot(df, {x: "x", y: "y"}) ] })
方法2:用R主动定义ojs环境变量
在R代码块中使用quarto::ojs_define()函数,将数据框主动注入到Observable的运行环境中,之后在ojs代码块里可以直接使用该变量。
示例:
df = data.frame( x = 1:10, y = 2:11 ) # 将df传递到ojs环境 quarto::ojs_define(df = df)
// 直接使用已传递的df console.log(df); // 可视化示例 Plot.plot({ marks: [ Plot.line(df, {x: "x", y: "y", stroke: "steelblue"}) ] })
这两种方式都是即时处理(on the fly),不需要生成中间CSV文件,能高效实现R与Observable的数据互通。
内容的提问来源于stack exchange,提问作者Lenn
相关产品推荐
相关产品推荐

