не может запускать один и тот же код на разных машинах - PullRequest
2 голосов
/ 19 июня 2020

У меня есть df

df <- data.frame(id=c(1,2,3,4,5), ctry=c("UK","DE","IT","DE","UK"))

Когда я запускаю этот код

df <- df %>% pivot_wider(names_from = ctry, values_from = ctry, values_fill = list(ctry = 0))

на моем Macbook, он работает нормально. Но когда я запускаю тот же файл сценария на другом Macbook, он продолжает показывать ошибку «Ошибка: не удается преобразовать двойное значение в символ». Что мне делать, чтобы это исправить? Спасибо.

Ответы [ 2 ]

2 голосов
/ 19 июня 2020

Видимо это изменение тидыра 1.1.0 версии. Из журнала изменений:

pivot_wider () аргументы values_fn и values_fill теперь могут быть отдельными значениями; теперь вам нужно использовать именованный список только в том случае, если вы хотите использовать разные значения для разных столбцов значений (# 739, # 746). Они также улучшают ошибки, если они не ожидаемого типа.

В зависимости от версии R и tidyr вам может потребоваться преобразовать «ctry» из множителя в символ, а затем заключить 0 в кавычки, чтобы также стать символьной строкой.

df <- data.frame(id=c(1,2,3,4,5), ctry=c("UK","DE","IT","DE","UK"))
df$ctry <- as.character(df$ctry)
df %>% pivot_wider(names_from = ctry, values_from = ctry, 
                    values_fill = list(ctry = "0"))
2 голосов
/ 19 июня 2020

Я думаю, у вас разные версии R, я использую R 3.6.1:

df %>% pivot_wider(values_from = "ctry", names_from="ctry",values_fill = list(ctry = 0))
Error: Can't cast `x` <double> to `to` <factor<a55ab>>.
Run `rlang::last_error()` to see where the error occurred.

В R 4.0 я думаю, что по умолчанию stringsAsFactors = FALSE в data.frames. Итак, чтобы это работало:

df %>% 
mutate(ctry=as.character(ctry)) %>% 
pivot_wider(values_from = ctry, names_from=ctry,values_fill = list(ctry = 0))

# A tibble: 5 x 4
     id UK    DE    IT   
  <dbl> <chr> <chr> <chr>
1     1 UK    0     0    
2     2 0     DE    0    
3     3 0     0     IT   
4     4 0     DE    0    
5     5 UK    0     0  
...