«Ошибка оценки: объект не найден» в dplyr при вызове еще не созданного объекта - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть код, подобный этому, с каналами для создания фрейма данных "full_tb", который завершается ошибкой, потому что предпоследняя строка (mutate для создания столбца ID) вызывает объект ("full_tb"), который не был созданпока.

library(random)
library(dplyr)  

set.seed(1)
Codes <- as.vector(randomStrings(n = 10, len = 3, digits = TRUE, upperalpha = FALSE,
         unique = TRUE))

frame1 <- data.frame(
  A = sort(Codes),
  B = sample(x = c("Tree", "Shrub", "Fern"), size = 10, replace = TRUE))
)

frame2 <- data.frame(
  Row_no = sort(sample(x = 1:10)),
  C = sample(x = sample(x = c("Tree", "Shrub", "Fern"), size = 30, replace = TRUE))
)

# Here is where the problem begins

full_tb <- frame1 %>% mutate(Row_no = as.numeric(rownames(frame1))) %>%  
           inner_join(frame2) %>%  
           mutate(ID = as.numeric(rownames(full_tb))) %>%  
           select(ID, A, B, C)

# Joining by = "Row_no"  
# Error in mutate_impl(.data, dots):   
# Evaluation error: object 'full_tb' not found   

Однако, если я разделю трубы на две части, все будет хорошо.

full_tb <- frame1 %>% mutate(Row_no = as.numeric(rownames(frame1))) %>%  
           inner_join(frame2)

# Joining by = "Row_no"  

full_tb  <- full_tb %>% mutate(ID = as.numeric(rownames(full_tb))) %>%  
            select(ID, A, B, C)

Есть ли обходной путь для передачи всего в один кусок без необходимости деления первого блока кода на две части?

1 Ответ

0 голосов
/ 05 октября 2018

Добавляя точку в качестве аргумента имен строк в блоке кода, куда мы хотим передать, идентификаторы генерируются для всего фрейма данных после объединения.Поэтому нет необходимости указывать имя кадра данных в именах строк.

full_tb <- frame1 %>% mutate(Row_no = as.numeric(rownames(frame1))) %>%  
           inner_join(frame2) %>%  
           mutate(ID = as.numeric(rownames(.))) %>%  
           select(ID, A, B, C)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...