小编Ste*_*ano的帖子

创建一个交互式弹出对话框

我想知道是否可以使用闪亮(和shinyBS)创建一个交互式弹出对话框.

例如,我有一个字符串,我想更改它,然后在做一个对话框显示询问我是否真的想要更改它.如果我说"是",它会这样做,否则它会丢弃更改.这是我的尝试,但我发现了两个问题:1.如果单击"是"或"否",则没有任何更改2.您始终需要通过底部"关闭"关闭该框.

rm(list = ls())
library(shiny)
library(shinyBS)

name <- "myname"

ui =fluidPage(
  textOutput("curName"),
  br(),
  textInput("newName", "Name of variable:", name),
  br(),
  actionButton("BUTnew", "Change"),
  bsModal("modalnew", "Change name", "BUTnew", size = "small",
          textOutput("textnew"),
          actionButton("BUTyes", "Yes"),
          actionButton("BUTno", "No")
  )
)
server = function(input, output, session) {
  output$curName <- renderText({paste0("Current name: ", name)})

  observeEvent(input$BUTnew, {
    output$textnew <- renderText({paste0("Do you want to change the name?")})
  })

  observeEvent(input$BUTyes, {
    name <- input$newName
  })
}
runApp(list(ui = ui, server = server))
Run Code Online (Sandbox Code Playgroud)

其他建议非常欢迎!!

r shiny shinybs

5
推荐指数
2
解决办法
7906
查看次数

R - 基于另一个数组连接字符串元素

我有一个简单的问题,我发现了一个非常复杂(C 风格)的解决方案,我想知道是否有比这更简单的东西。我有两个数组:

  y <- c("A","B","C","D","E")
  d <- c(1,3,1)
Run Code Online (Sandbox Code Playgroud)

我需要得到一个数组

"A","B-C-D","E"
Run Code Online (Sandbox Code Playgroud)

因此,根据分布,聚合由 a (或任何其他分隔符)分隔d的元素。y-

我做了这个

old_y <- y
y <- NULL

k <- 1
for (i in 1:length(d)) {
  y[i] <- as.character(old_y[k])
  j <- 1
  while(d[i]>j) {
    y[i] <- paste0(y[i], "-", as.character(old_y[k+j]))
    j <- j + 1
  }
  k <- k + d[i]
}
Run Code Online (Sandbox Code Playgroud)

arrays string r concatenation

3
推荐指数
1
解决办法
136
查看次数

通过排列两个变量来添加计数器列(dplyr)

我一直在寻找一段时间,但我无法找到解决方案.我有一个数据框,其中包含ID和VAR.我在下面试图复制一个样本

require(dplyr)
seed(123)
N <- 3
T <- 4
id <- rep(letters[1:N], each = T) 
var <- rep(sample(seq(1:100),T),N) 
row <- sample(seq(1:(N*T)),replace = F)

dt <- data.frame(ID=id,VAR=var,ROW=row) %>%
  arrange(ROW) %>%
  select(-ROW)
Run Code Online (Sandbox Code Playgroud)

我想arrange通过ID和VAR为每个组添加一个计数器以获得类似的东西

   ID VAR COUNTER
1   a   1 1
2   a  11 2
3   a  22 3
4   a  64 4
5   b   1 1
6   b  11 2
7   b  22 3
8   b  64 4
9   c   1 1
10  c  11 2
11  c  22 3 …
Run Code Online (Sandbox Code Playgroud)

group-by r count dplyr

2
推荐指数
1
解决办法
1137
查看次数

使用"NA"将R数组传递给C函数

我使用C库在R中工作.我需要向C函数传递一个数字在1到10之间的数组,但也可能是"NA".然后在C中,取决于我需要设置输出的值.这是一个简化的代码

heredyn.load("ranking.so")

fun <- function(ranking) {
  nrak <- length(ranking)
  out <- .C("ranking", as.integer(nrak), as.character(ranking), rr = as.integer(vector("integer",nrak)))
  out$rr
}

ranking <- sample(c(NA,seq(1,10)),10,replace=TRUE)
rr <- fun(ranking)
Run Code Online (Sandbox Code Playgroud)

C函数可以简单地如

#include <R.h>

void ranking(int *nrak, char *ranking, int *rr) {
  int i ;

  for (i=0;i<*nrak;i++) {
    if (ranking[i] == 'NA')
      rr[i] = 1 ;
    else
      rr[i] = (int) strtol(&ranking[i],(char **)NULL,10) ;
  }
}
Run Code Online (Sandbox Code Playgroud)

由于"NA"值,我将排名设置为字符,但也许还有另一种方法,使用整数并且在调用函数之前不将"NA"替换为0?

(像这样的代码,总是给我一个零数组...)

c r parameter-passing dynamic-library

0
推荐指数
2
解决办法
668
查看次数