我正在尝试编写一个javascript函数来扩展R闪亮动作按钮演示.我希望用户能够通过单击操作按钮并在选择数字输入表单时按Enter键来输入数字.ui.R的代码是:
shinyUI(pageWithSidebar(
headerPanel("actionButton test"),
sidebarPanel(
tags$head(tags$script(src = "enter_button.js")),
numericInput("number", "N:", min = 0, max = 100, value = 50),
br(),
actionButton("goButton", "Go!"),
p("Click the button to update the value displayed in the main panel.")
),
mainPanel(
verbatimTextOutput("nText")
)
))
Run Code Online (Sandbox Code Playgroud)
和server.R:
shinyServer(function(input, output) {
ntext <- eventReactive(input$goButton, {
input$number
})
output$nText <- renderText({
paste(ntext(), input$goButton)
})
})
Run Code Online (Sandbox Code Playgroud)
我在www /文件夹中的一个名为enter_button.js的文件中包含以下javascript:
$("#number").keyup(function(event){
if(event.keyCode == 13){
$("#goButton").click();
}
});
Run Code Online (Sandbox Code Playgroud)
但是,当我运行应用程序时,选择数字输入表单并点击输入操作按钮不会增加,但如果我点击它会增加.或者,我也测试了只需按下输入文档的任何位置:
$(document).keyup(function(event){
if(event.keyCode == 13){
$("#goButton").click();
}
});
Run Code Online (Sandbox Code Playgroud)
这很有效,所以我怀疑jQuery找不到#number元素.提前致谢!
我正在尝试创建一个包含一个isize
或一个的通用结构AtomicIsize
,但是当我尝试为结构的两个可能实现实现一个特性时,我遇到了一个错误.我创建了一个最小的例子来演示我的问题.
use std::sync::atomic::{AtomicIsize, Ordering};
use std::ops::Deref;
use std::marker::PhantomData;
pub trait Counted {
fn inc(&self, value: isize);
}
pub type PlainCounter = isize;
pub type AtomicCounter = AtomicIsize;
pub struct Counter<'a, T: 'a> {
counter: T,
phantom: PhantomData<&'a T>,
}
impl<'a, T> Counter<'a, T>
where T: Deref<Target = PlainCounter>
{
pub fn new(counter: T) -> Self {
Counter {
counter: counter,
phantom: PhantomData,
}
}
}
impl<'a, T> Counted for Counter<'a, T>
where T: Deref<Target = PlainCounter> …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用R函数socketConnection()连接到R中的socket.io套接字。但是,尽管我能够正确设置套接字,但无法将数据从套接字读取到R中。
我用来设置服务器的javascript代码是:
var app = require('http').createServer(handler)
var io = require('socket.io')(app);
var fs = require('fs');
app.listen(8005);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.on('connection', function (socket) {
setInterval(function() {
socket.emit('update', "test")
}, 1000);
});
Run Code Online (Sandbox Code Playgroud)
index.html的代码是:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io('http://localhost:8005');
socket.on('update', function (data) {
console.log(data);
});
</script>
Run Code Online (Sandbox Code Playgroud)
通过在Web浏览器中转到localhost:8005并打开开发人员控制台,可以在其中看到“测试”记录,从而验证套接字是否确实在工作。但是,当我尝试通过以下方式连接到R中的套接字时:
sock <- socketConnection("localhost", 8005, blocking = FALSE, open = "r")
readLines(sock)
Run Code Online (Sandbox Code Playgroud)
每次运行readLines(sock)时,我都会得到一个空字符向量。我还通过执行以下命令并确实从readLines(sock)获得响应,可以从R中的其他套接字读取信息:
sock …
Run Code Online (Sandbox Code Playgroud) 我今天在 R Shiny 中为复选框组实现了一个切换按钮,我遇到了一些我不完全理解的有趣的事情。我创建切换按钮的第一种方法是编写一个 javascript 脚本来切换复选框的checked
属性,因此当用户单击按钮时,true 变为 false,false 变为 true。这有效,当我运行闪亮的应用程序并按下切换按钮时,复选框被翻转。但是,如果我显示选择,使用renderText()
,shiny 不会对我的更改做出反应。但是,如果我单击复选框组之一,Shiny 将更新为相应的复选框。
然后我更改了我的 javascript 代码,而不是设置checked
属性,它使用 jQuery.click()
来单击每个复选框。这种方法与我希望的完全一样,所以当我按下切换按钮时,复选框会翻转并更新文本。我很想知道为什么会这样。我的怀疑是,shiny 侦听单击事件,但无法侦听以编程方式更改的属性。我的解释不太好,所以我创建了一个小的Shinyapps 应用程序来演示切换按钮行为的差异。第一个切换按钮使用.click()
和工作,第二个使用checked
属性并且不会被动更新。我用来演示差异的代码如下:
用户界面
library(shiny)
fruit = c("apple", "banana", "orange", "pear", "peach")
shinyUI(fluidPage(
tags$script(src = "toggle_button.js"),
titlePanel("Test"),
sidebarLayout(
sidebarPanel(
checkboxGroupInput("fruit_list",
"Select a fruit",
choices = fruit,
selected = fruit),
fluidRow(
actionButton("toggleButton_1", "Toggle 1"),
actionButton("toggleButton_2", "Toggle 2")
)
),
mainPanel(
textOutput("string")
)
)
))
Run Code Online (Sandbox Code Playgroud)
服务器
library(shiny)
shinyServer(function(input, output) {
output$string <- renderText({ …
Run Code Online (Sandbox Code Playgroud) 我很好奇是否有办法在类的定义中为 R6 类创建类变量?我通读了R6 类简介小插图,但没有发现任何类变量的提及。我能够在使用创建类之后创建类变量,ClassName$variableName <- initial_value
但是很好奇是否有办法在实际的类定义中做到这一点。
例如,考虑Person
下面的类,它有一个类变量count
,用于跟踪Person
已实例化的对象数量:
library(R6)
Person <- R6Class("Person",
public = list(
name = NA,
initialize = function(name) {
Person$count <- Person$count + 1
if (!missing(name)) self$name <- name
}
)
)
Person$count <- 0
Person$count # 0
john <- Person$new("John")
Person$count # 1
james <- Person$new("James")
Person$count # 2
Run Code Online (Sandbox Code Playgroud) 我很好奇之前是否有人尝试过在 Go 中池化地图?我之前读过有关池化缓冲区的内容,我想知道通过类似的推理,如果必须频繁创建和销毁它们,或者是否有任何原因,先验地认为池化映射可能效率不高,那么池化映射是否有意义。当映射返回到池中时,必须迭代它并删除所有元素,但似乎流行的建议是创建一个新映射,而不是删除已分配的映射中的条目并重用它让我觉得池化地图可能没有那么有益。
我期待建立一个ELK堆栈,并有三个服务器这样做.虽然我找到了大量关于如何实际安装,配置elasticsearch,logstash和kibana的文档和教程,但我发现有关如何在服务器上设置软件以最大限度地提高性能的信息.例如,在所有三个实例上设置elasticsearch,logstash和kibana会不会更好,或者可能在两个实例上安装elasticsearch并在第三个实例上安装logstash和kibana?
与该问题相关,如果我的群集中有多个elasticsearch服务器,我是否需要负载均衡器来向他们传播请求,或者我可以将数据发送到一个服务器,它会相应地分发它吗?
我最近一直在研究我的第一个Rust项目,但遇到了障碍.我正在使用HashMap
映射String
到AtomicUsize
整数.该HashMap
被保护的RwLock
,允许并发访问.我希望能够返回对AtomicUsize
值的引用HashMap
,但是如果我尝试将这些引用返回给调用者,那么RwLockWriteGuard
我的生命周期就会出现错误borrowed value does not live long enough
.我抄录如下一个小例子,把上锈操场同样的例子在这里.
use std::collections::HashMap;
use std::sync::RwLock;
use std::sync::atomic::{AtomicUsize, Ordering};
struct Bar {
val: AtomicUsize
}
impl Bar {
pub fn new() -> Self {
Bar { val: AtomicUsize::new(0) }
}
}
struct Foo {
map: RwLock<HashMap<String, Bar>>
}
impl Foo {
pub fn get(&self, key: String) -> &Bar {
self.map.write().unwrap().entry(key).or_insert(Bar::new())
}
}
fn main() { …
Run Code Online (Sandbox Code Playgroud)