R - Создание функции: функция не находит переменные с момента обновления системы и R - PullRequest
0 голосов
/ 15 октября 2018

Я написал несколько функций, чтобы соответствовать некоторым моделям и делать графики на моем старом компьютере, но они, кажется, не работают, так как я начал использовать последнюю версию R (или пакета).

У меня такое же сообщение об ошибке, как и в этой теме , но я уже указываю на данные, загруженные в рабочую область, поэтому решение там не работает для меня.

Я работаю над данными из опроса во фрейме данных, где первая строка - заголовки столбцов, а значения - целые числа.Для примера мы сгенерируем 50x3 df - я пытался использовать данные из разных источников, у меня та же проблема, так что это будет работать для примера.

Я хочу сделать функциюкоторый может принимать имена столбцов и имя фрейма данных в качестве входных данных и выводить сводку вызова lm() и графика.Использование lm() или ggplot() на small_wb вне функции работает нормально.Но они не будут работать как часть функции.Я не вижу ничего плохого в моем синтаксисе, есть что-то очевидное, что я упускаю?

#########
## Load ggplot2
library(ggplot2)


#########
## Build a dataset 
set.seed(1)
small_df <- data.frame(Monnaie = sample(1:100, 50, replace = TRUE), Echange = sample(1:100, 50, replace = TRUE), Art = sample(1:100, 50, replace = TRUE))



###########
## Using summary() and lm() works
summary(lm(Art ~ Monnaie, small_df))

# Call:
#   lm(formula = Art ~ Monnaie, data = small_df)
# 
# Residuals:
#   Min      1Q  Median      3Q     Max 
# -36.256 -23.532  -8.721  20.025  61.364 
#
# etc etc etc


## Using ggplot() works too
ggplot(small_df, aes(Monnaie, Art)) +
  geom_point() +
  geom_smooth(method = "lm")

## ** awesome plot ** ##



###########
### Do some functions to test
## Plot lm
plot_lm <- function(i, j, wb){
  ggplot(wb, aes(i, j)) +
    geom_point() +
    geom_smooth(method = "lm")
}

## Summary lm
mod_lm <- function(i, j, wb) {
  summary(lm(j ~ i, data = wb))
}

## Plot + summary lm (this is what I want to achieve in the end, a function that does the plot + shows the data)
modplot_lm <- function(i, j, wb) {
  summary(lm(j ~ i, data = wb))
  plot_lm(i, j, wb)
}



##########
## Test the functions 
plot_lm(Monnaie, Art, small_df)
mod_lm(Monnaie, Art, small_df)
modplot_lm(Monnaie, Art, small_df)


#######
## With me, they all throw an error - here's what the terminal prints out (I included the traceback text where possible - though the problem varies between 'Art' not found and 'Monnaie' not found)

> plot_lm(Monnaie, Art, small_df)
Error in FUN(X[[i]], ...) : object 'Monnaie' not found

> mod_lm(Monnaie, Art, small_df)
 Hide Traceback

 Error in eval(predvars, data, env) : object 'Art' not found 
9.    eval(predvars, data, env) 
8.    eval(predvars, data, env) 
7.    model.frame.default(formula = j ~ i, data = wb, drop.unused.levels = TRUE) 
6.    stats::model.frame(formula = j ~ i, data = wb, drop.unused.levels = TRUE) 
5.    eval(mf, parent.frame()) 
4.    eval(mf, parent.frame()) 
3.    lm(j ~ i, data = wb) 
2.    summary(lm(j ~ i, data = wb)) 
1.    mod_lm(Monnaie, Art, small_df) 

> modplot_lm(Monnaie, Art, small_df)
 Hide Traceback

 Error in eval(predvars, data, env) : object 'Art' not found 
9.    eval(predvars, data, env) 
8.    eval(predvars, data, env) 
7.    model.frame.default(formula = j ~ i, data = wb, drop.unused.levels = TRUE) 
6.    stats::model.frame(formula = j ~ i, data = wb, drop.unused.levels = TRUE) 
5.    eval(mf, parent.frame()) 
4.    eval(mf, parent.frame()) 
3.    lm(j ~ i, data = wb) 
2.    summary(lm(j ~ i, data = wb)) 
1.    modplot_lm(Monnaie, Art, small_df) 

Я пробовал вызовы функций отдельно, чтобы найти проблему, но кажется, что они все не работаютмне, что проблема связана с именами столбцов, не найденными в среде функции.

Вот моя информация о сеансе

> sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

locale:
[1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252    LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C                            LC_TIME=English_United Kingdom.1252    

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

other attached packages:
[1] ggplot2_3.0.0

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.19     withr_2.1.2      crayon_1.3.4     dplyr_0.7.6      assertthat_0.2.0 grid_3.5.1       plyr_1.8.4      
 [8] R6_2.3.0         gtable_0.2.0     magrittr_1.5     scales_1.0.0     pillar_1.3.0     rlang_0.2.2      lazyeval_0.2.1  
[15] bindrcpp_0.2.2   labeling_0.3     tools_3.5.1      glue_1.3.0       purrr_0.2.5      munsell_0.5.0    compiler_3.5.1  
[22] pkgconfig_2.0.2  colorspace_1.3-2 tidyselect_0.2.5 bindr_0.1.1      tibble_1.4.2    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...