2015-11-10 73 views
2

我試圖將一個參數作爲字符傳遞給ggvis,但是我得到一個空的圖。將參數傳遞給ggvis

重複的例子:

library(ggvis) 
y <- c("mpg", "cyl") 

ing <- paste0("x = ~ ", y[1], ", y = ~ ", y[2]) 

#works as intended 
mtcars %>% ggvis(x = ~ mpg, y = ~ cyl) %>% 
     layer_points() 

#gives empty plot 
mtcars %>% ggvis(ing) %>% 
     layer_points() 

這是如何從以下不同的方法在LM()多數民衆贊成在正常工作?

formula <- "mpg ~ cyl" 
mod1 <- lm(formula, data = mtcars) 
summary(mod1) 
#works 

由於

+0

如果變量的名稱是字符串,則可以使用'prop'。它可能看起來像:'mtcars%>%ggvis(prop(「x」,as.name(y [1])),prop(「y」,as.name(y [2])))' – aosmith

+0

Haven'之前用過'prop',謝謝。 – Xlrv

回答

0

lm情況下,字符串將在內部強制轉換爲類式對象。 ~運算符是創建此公式對象的。

在第二種情況下,ggvis需要兩個單獨的公式,用於參數xy。在你的情況下,你只有一個很長的字符串,如果在逗號分隔(但這個長字符串本身不是一個公式),它可能被強制爲兩個單獨的公式。

因此,ggvis功能將需要是這樣爲了工作:

#split the ing string into two strings that can be coerced into 
#formulas using the lapply function 
ing2 <- lapply(strsplit(ing, ',')[[1]], as.formula) 

#> ing2 
#[[1]] 
#~mpg 
#<environment: 0x0000000035594450> 
# 
#[[2]] 
#~cyl 
#<environment: 0x0000000035594450> 


#use the ing2 list to plot the graph 
mtcars %>% ggvis(ing2[[1]], ing2[[2]]) %>% layer_points() 

但是,這不會是做了非常有效的事情。