Почему lapply () конвертирует мой фрейм данных R в список? - PullRequest
0 голосов
/ 11 октября 2018

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

Например, следующее возвращаетсписок

junk <- data.frame(col1 = 1:3,
                   col2 = c("a,b,c"),
                   col3 = c(T,T,F))

junk <- lapply(junk, function(x) {
    if (is.numeric(x)) return(x*2)
    else return(x)})

str(junk)

, где в качестве следующего возвращается фрейм данных.

junk <- data.frame(col1 = 1:3,
                   col2 = c("a,b,c"),
                   col3 = c(T,T,F))

junk[] <- lapply(junk, function(x) {
    if (is.numeric(x)) return(x*2)
    else return(x)})

str(junk)

Я хотел бы знать, почему [] сохраняет структуру фрейма данных и что []делает в этом случае.Я понимаю, почему первый блок кода преобразует junk в список, но не понимаю, почему второй блок сохраняет структуру, хотя я не мог придумать четкого заголовка для описания вопроса / ситуации.Спасибо.

1 Ответ

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

Естественно, что lapply возвращает список, потому что не всегда гарантируется, что функция FUN возвращает результаты обработки того же размера.

dat <- data.frame(a = c(1,1,2), b = c(1,1,1))
lapply(dat, unique)

Второе не сохраняет структуруизменение исходного фрейма данных на месте.Это делает это

tmp <- lapply(...); junk[] <- tmp; rm(tmp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...