2016-08-29 12 views
1

私は解決できない奇妙な問題があります。r式はRのddply()では動作しますが、光沢のあるマークダウンでは機能しません

次のコードでは、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スタジオで実行されますが、rマークダウンでは実行されません。 – chungkim271

+0

@ chungkim721ファイルに保存したコードをRStudioの 'rmarkdown :: run'で実行し、Chromeのlocalhost経由でアプリにアクセスできました。あなたはサーバーに展開しましたか、「in r markdown」とまったく同じ意味ですか? – nilsole

答えて

0

ありがとう:ここに私の値下げコードがあります。

まず、なぜ@nilsoleがコードのrマークダウン部分をうまく動作させることができなかったのか分かりません。私はそうではありませんでした。私は会社のサーバー上でマークダウンを実行したので、おそらくサーバーと関係がありますか?私の完全な知識の欠如は、原因がどこにあるのか推測できなくなってしまった。

第2に、RStudioに連絡したときのWinston Changからの応答です。

申し訳ありませんが、私は問題の正確な原因を知りません。 光沢のあるランタイムは、ddplyと 変換が期待できない環境で何かをやっているようです。両方とも引数の非標準評価 を使用し、evalと組み合わせると結果は と予測できません。どの環境で eval()が実行されるかは完全にはわかりません。 ddplyそれは、(DT、(b)は、関数(x)は{(X、差分= 評価を変異(F))})

一般に

をだろう:関数は 呼び出し環境を捕捉するので、これは、動作しますdplyrとそのバージョンの 関数の標準的な評価を使用する関数を使用することは、より安全です。例えば:DT %>%GROUP_BY(B)%>%mutate_(差分= "A + 1")

両方その推奨私の問題を解決します。

関連する問題