2016-08-29 2 views
1

У меня возникла странная проблема, которую я не могу решить.r выражение работает в ddply() в R, но не в блестящей уценке

следующий код отлично работает в R студии:

> set.seed(12345) 
> 
> library(plyr) 
> library(dplyr) 
> 
> dt <- data.frame(a=1:10, b=sample(1:3, 10, replace=T)) 
> 
> var <- "a" 
> formula <- parse(text=paste0(var, "+1"))[[1]] 
> 
> print(dt) 
    a b 
1 1 3 
2 2 3 
3 3 3 
4 4 3 
5 5 2 
6 6 1 
7 7 1 
8 8 2 
9 9 3 
10 10 3 
> 
> # this works in R Studio, but not in markdown 
> res <- dt %>% 
+  ddply(.(b), transform, diff = eval(formula)) 
> print(res) 
    a b diff 
1 6 1 7 
2 7 1 8 
3 5 2 6 
4 8 2 9 
5 1 3 2 
6 2 3 3 
7 3 3 4 
8 4 3 5 
9 9 3 10 
10 10 3 11 

Когда я запускаю тот же код в R уценкой, я получаю сообщение об ошибке, говорящее

Error: arguments imply differing number of rows: 2, 0 

Что здесь происходит? Вот моя уценка код:

--- 
title: "Untitled" 
author: "Author" 
date: "8/29/2016" 
output: html_document 
runtime: shiny 
--- 

```{r} 
set.seed(12345) 

library(plyr) 
library(dplyr) 

dt <- data.frame(a=1:10, b=sample(1:3, 10, replace=T)) 

formula <- parse(text=paste0("a", "+1"))[[1]] 

#this does work in R, but not in markdown 
res <- dt %>% 
    ddply(.(b), transform, diff = eval(formula)) 
res 


``` 

Благодаря

+0

не удается воспроизвести. Результат на моей машине такой же, как и выше. – nilsole

+0

Вы запустили последний блок кода в документе уценки? Код запускается в r studio, только не в уценке r. – chungkim271

+0

@ chungkim721 Я взял ваш код, сохраненный в файл, запустил эту вещь с помощью 'rmarkdown :: run' в RStudio и смог получить доступ к приложению через localhost в Chrome. Развертывались ли вы на сервере или что именно вы подразумеваете под «in r markdown»? – nilsole

ответ

0

спасибо для тех, кто прокомментировал мой пост.

Во-первых, я не уверен, почему @nilsole удалось запустить r-уценку части кода, и я не был. Я запустил уценку на сервере моей компании, так что, возможно, это связано с нашим сервером? Моя полная нехватка знаний по этому вопросу не позволяет мне даже догадываться, где может быть причина.

Во-вторых, это ответ, который мы получили от Уинстона Чанга, когда мы связались с RStudio.

Извините, я не знаю точной причины проблемы. Похоже, что блестящая среда исполнения что-то делает с окружающей средой, которая ddply и трансформации не ожидают. Оба из них используют нестандартную оценку своих аргументов, и в сочетании с eval результаты непредсказуемы. Мне не совсем понятно, в какой среде будет работать eval() . Это будет работать, потому что функция захватывает призывающих сред: ddply (дт, (б), функция (х) {мутируют (х, дифф = Eval (е))}.)

В общем, было бы будьте безопаснее придерживаться dplyr и его версий функций , которые используют стандартную оценку аргументов. Например: дт %>% group_by (б)%>% mutate_ (дифф = "а + 1")

оба чьи рекомендации решить мою проблему.

Смежные вопросы