我可以帮助您翻译:我可以从R的Jupyter笔记本中调用自定义JavaScript吗?

3
我有一个使用R编程语言的Jupyter Notebook。我想在这个R笔记本中调用JavaScript函数。
我知道有一种方法可以做到这一点,因为有基于JavaScript的库可以从R中调用,但是我找不到包装JavaScript函数的任何示例,以便它可以被R使用。
即使是将JavaScript分配给R变量的示例,然后调用该R变量也会很有帮助。
3个回答

2

js::js_eval()可以在R中评估JavaScript字符串。来自?js::js_eval

# Stateless evaluation
js_eval("(function() {return 'foo'})()")

如果需要进行更复杂的JavaScript操作,请查看V8,它可以让您在多行中保留JavaScript实例。来自?V8::v8

# Create a new context
ctx <- v8();

# Evaluate some code
ctx$eval("var foo = 123")
ctx$eval("var bar = 456")
ctx$eval("foo+bar")

最终,除了小型hack之外,使用它将变得非常令人沮丧,但它确实有效。如果您足够聪明,可能可以找到整个脚本的来源,但我不确定除非有些事情绝对只能在JavaScript中完成才值得这样做。快乐地hack吧!


谢谢帮助! - undefined
如果你尝试这个并且在使用js_eval时遇到了困难,以下方法对我有效:在终端中执行以下命令 sudo gem install libv8 -v '3.16.14.3' -- --with-system-v8 brew tap homebrew/versions brew install v8-315在R中, install.packages("V8”) install_github("jeroenooms/js”)现在Javascript将可以正常工作。 js::js_eval("(function() {return 'foo'})()") - undefined

1

我只是想提供这个答案,以防有人对在Jupyter R中使用javascript/html感兴趣。以下是一个非常基本的示例:

test="<input type=\"file\" id=\"myFile\"/>"
as.factor(test)

as.factor()函数可以去除引号,但你基本上只需将JavaScript/HTML赋值给一个R变量并调用该变量。例如:

test="<input type=\"file\" id=\"myFile\"/>"
test

1
我想在R中运行这段代码(在Python Jupyter Notebook中有效):%%javascript var cell = Jupyter.notebook.get_selected_cell(); console.log(Jupyter.notebook.find_cell_index(cell));你有什么建议吗? - undefined

0

所以我找到了另一种方法,通过使用HTML函数来实现这个。下面是一个示例,通过点击文本来显示和隐藏单元格中的代码。

from IPython.core.display import HTML
HTML("""
 <style>
     // add your CSS styling here
 </style>
 <script>
     var code_show=true; //true -> hide code at first

     function code_toggle() {
         $('div.prompt').hide(); // always hide prompt

         if (code_show){
             $('div.input').hide();
         } else {
             $('div.input').show();
         }
         code_show = !code_show
     }
     $( document ).ready(code_toggle);
 </script>
 <a href="javascript:code_toggle()" 
     style="text-decoration:none; background-color: none;color:black;">
     <h1 align="center">Example</h1>
 </a>
""")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接