2015-03-09 7 views
10

Bu neden çalışmıyor?Neden bazen `do`daki bir argüman için` .` `` data.frame() `ın içine almak zorundayım?

data.frame(x = rnorm(100)) %>% do(df = .)

Hata mesajı:

data.frame(x = rnorm(100)) %>% do(df = data.frame(.)) 

Alternatif olarak, bu da çalışır:

data.frame(x = rnorm(100)) %>% do(., df = .) 
012 yerine

Error in do_(.data, .dots = lazyeval::lazy_dots(...)) : 
    argument ".data" is missing, with no default 

, ben .data.frame() içinde girilir zorunda

Örnek, elbette, mantıklı değil. Ancak, group_by ile çalışırken, data.frame listesini değişken olarak kaydetmek yararlı olabilir.

library("MatchIt") 
n <- 5000 
DF <- data.frame(
    x1 = rnorm(n), 
    x2 = rbinom(n, 1, 0.5), 
    group = rbinom(n, 1, 0.5), 
    D = rbinom(n, 1, 0.5)) 

Şimdi bu bir hata üretir: Burada

ilişkili görünmektedir daha karmaşık bir sorundur

DF %>% 
    group_by(group) %>% 
    do(m = matchit(D ~ x1, data = ., exact = "x2")) 

Ama .data.frame() içinde girilir zaman çalışır:

DF %>% 
    group_by(group) %>% 
    do(m = matchit(D ~ x1, data = data.frame(.), exact = "x2")) 

ile ikinci örnek olup olmadığından emin değilimilişkilidir, ancak her iki durumda da .'u data.frame() içine kapatmam gerekiyor.

sessionInfo()

> sessionInfo() 
R version 3.1.1 (2014-07-10) 
Platform: x86_64-apple-darwin13.4.0 (64-bit) 

locale: 
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base 

other attached packages: 
[1] MatchIt_2.4-21 MASS_7.3-33 dplyr_0.4.1 Defaults_1.1-1 

loaded via a namespace (and not attached): 
[1] assertthat_0.1 DBI_0.3.1  lazyeval_0.1.10 magrittr_1.5 parallel_3.1.1 Rcpp_0.11.4  tools_3.1.1 
+0

'mtcars%>% group_by (silindir)%>% do (mod = İm (MPG ~ v, veri =.)) 'Çalışıyor mu? –

+0

Evet, işe yarıyor. 2. örnekte, problem, belirli durumlarda (“kesin” argümanını kullandığımda) ortaya çıkar. Sorularımın bir kısmı ne zaman ve neden '' '' data.frame() 'ın içine yerleştirmem gerektiğini ya da kurulumumda bir sorun olup olmadığını. Teşekkürler! – user2503795

+2

İkinci sorun, aslında 'do' ile ilgili olmadığı için birinciyle ilgili değil: çünkü' matchit 'tbl_df's üzerinde çalışmıyor. Matchit'i (D ~ x1, data = tbl_df (DF), kesin = "x2") deneyin, örneğin aynı hatayı alır. –

cevap

3

fark bölme zincirlerinin magrittr dan gelir.

expr1 <- substitute(data.frame(x = rnorm(100)) %>% do(df = .)) 
expr2 <- substitute(data.frame(x = rnorm(100)) %>% do(df = (.))) 

magrittr:::split_chain(expr1) 
magrittr:::split_chain(expr2) 
İlgili konular