RMarkdown V2 блестящий документ и dplyr

#r #shiny #dplyr #r-markdown

#r #блестящий #dplyr #r-markdown

Вопрос:

Я пытаюсь использовать выбор входных данных для rmarkdown v2 с помощью dplyr, чтобы выбрать определенные столбцы для отчета. Затем выбранный столбец будет использоваться в формуле, заданной функции nls() для определения значения некоторой константы C.

Мой код выглядит следующим образом:

 ---
title: "Test"
author: "Author"
date: "Wednesday, June 18, 2014"
output: html_document
runtime: shiny
---

```{r, echo=TRUE}
require(dplyr)
#Some sample random data in a data.frame:
test=data.frame(A=runif(n=10),V=runif(n=10),N=runif(n=10))

#Input box to choose desired column
inputPanel(
  selectInput('sample.choice', label = 'Choose Columns',
              choices = c('V Sample'='V',
                          'N Sample'='N'),
              selected='N')
)

#Make a reactive data.frame to be used with the nls function
test2=reactive(test%.%select(A,input$sample.choice))

#Display the data.frame
renderDataTable(test2())

#Use nls solver to determine a constant with a given formula:
c.fit=reactive(nls(A ~ I(C*input$sample.choice),data=test2(),start=list(C=1)))
renderText(summary(c.fit()))
```
  

Я получаю в качестве выходных Error: non-numeric argument to mathematical function данных после вызова renderDataTable и renderText .

Кто-нибудь может помочь мне разобраться, что здесь не так?

Обновить

Основываясь на комментариях @wch, я исправил select функцию dplyr. Я также пытался вызвать renderText , но вывод summary.nls имеет тип list . Это не сработает, и мне нужно было запустить renderPrint вместо этого. Рабочий код см. Ниже:

 ```{r, echo=TRUE}
require(dplyr)
test=data.frame(A=runif(n=10),V=runif(n=10),N=runif(n=10))

inputPanel(
  selectInput('sample.choice', label = 'Choose Columns',
              choices = c('V Sample'='V',
                          'N Sample'='N'),
              selected='N')
)

renderText(input$sample.choice)

test2=reactive(test%.%select(A,matches(input$sample.choice)))

renderDataTable(test2())

renderPrint({
  data=test2()
  formula=paste0('A ~ I(C*',input$sample.choice,')')
  c.fit=nls(formula,data=data,start=list(C=1))
  summary(c.fit)
})

```
  

Ответ №1:

Я думаю, проблема в том, что эта строка:

 test %>% select(A, input$sample.choice)
  

в итоге получается что-то вроде этого:

 test %>% select(A, "V")
  

Но dplyr нуждается в этом, потому что он использует нестандартную оценку:

 test %>% select(A, V)
  

Это возможный обходной путь:

 test %>% select(A, matches(input$sample.choice))
  

Комментарии:

1. Использование matches() устраняет проблему dplyr. Я получаю другую ошибку после вызова, для nls() которого выполняется чтение Error: parameters without starting value in 'data': sample.choice . Есть идеи? Я попытался обернуть аргумент eval(input$sample.choice) безрезультатно.

2. Я думаю, вам также придется создавать формулу из строки. Что-то вроде fmla <- as.formula(paste0("A ~ I(C*", input$sample.choice, ")")) , а затем nls(fmla, ...)