Как в R передать параметры таким функциям, как plotXtabs2, в виде строк? - PullRequest
1 голос
/ 08 мая 2020

PlotXTabs2 - это функция для построения пропорций кросс-таблицы между категориальными переменными, где есть 3 минимальных обязательных параметра

PlotXTabs2 (data, x, y)

data as data имена столбцов frame, x и y из этого фрейма данных.

Я хочу назвать его внутри al oop, где имена столбцов x, y будут строками, поступающими из dataframe colnames (), что-то вроде ....

varscat = colnames (df)

for(i in 1:(length(varscat)-1)) 
{
  for(j in (i+1):length(varscat))
  {
     tmp <- df[,c(myvars[varscat[i]], myvars[varscat[j]])]

     # ...

     PlotXTabs2( df, x=myvars[varscat[i]], y=myvars[varscat[j]] ) 
 }
}

Я безуспешно пытался следовать примерам с eval, do.call, большинство из них связаны с делами где предполагается использование для написания функций, принимающих параметры в виде строк.

Как добиться такого результата?

Ответы [ 2 ]

4 голосов
/ 08 мая 2020

Вы можете использовать !! из rlang:

library(CGPfunctions)
#> Registered S3 methods overwritten by 'lme4':
#>   method                          from
#>   cooks.distance.influence.merMod car 
#>   influence.merMod                car 
#>   dfbeta.influence.merMod         car 
#>   dfbetas.influence.merMod        car
library(ggplot2)
out <- lapply(combn(colnames(mpg), 2, simplify = FALSE), 
       function(z) PlotXTabs2( mpg, !!z[1], !!z[2]) )
out[[3]] ## example plot from the list

Создано 08.05.2020 с помощью пакета REPEX (v0.3.0)

Изменить:

Порядок пар переменных влияет на способ создания графиков. Мы можем специально выбрать первый и второй элементы пар с помощью такой функции:

plotPairs <- function(xvals, yvals, data, ...){
    pairs <- as.list(data.frame(t(expand.grid(xvals, yvals))))
    lapply(pairs, function(z) PlotXTabs2( data, !!z[1], !!z[2], ...))
}

out <- plotPairs(
    xvals = c("vs", "cyl", "gear"),
    yvals = c("am", "carb"),
    data = mtcars, 
    ylab = NULL,
    perc.k = 1,
    palette = "Set2")

2 голосов
/ 11 мая 2020

Как автор функции чувствовал себя обязанным показать, как я обычно ее использую, и избежать проблем с цитатами. Виньетки и файлы справки показывают более сложные примеры, в которых вы можете использовать pmap для создания заголовков et c, et c.

library(CGPfunctions)

# you can build by column number
# cross2_var_vectors(mtcars, 9, c(2, 10:11))
# or column name
# cross2_var_vectors(mtcars, "am", c("cyl", "gear", "carb"))
# build the vectors by hand
x2 <- c("am", "carb")
y2 <- c("vs", "cyl", "gear")
# cross2_var_vectors(mtcars, x2, y2, verbose = TRUE)

variables_list <- cross2_var_vectors(mtcars, x2, y2)

plotlist <- purrr::map2(
  .x = variables_list$lista
  .y = variables_list$listb,
  .f = CGPfunctions::PlotXTabs2,
  data = mtcars,
  ylab = NULL,
  perc.k = 1,
  palette = "Set2"
)

plotlist[[2]]

Создано 11.05.2020 с помощью пакета REPEX (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...