Я хотел бы программно преобразовать тип столбца в фрейм данных R, прочитанный из файла. Пример ниже не работает. Совет?
Файл foo.tsv:
x
1
2
Код, который не работает:
foo = read_tsv("foo.tsv")
foo[,'x'] <- as.integer(foo[,'x'])
Ошибка:
Error: (list) object cannot be coerced to type 'integer'
В этом случае read_tsv
уже возвращает целое число, но я хочу написать функцию, которая передает имена столбцов.
Этот код работает:
foo$x <- as.integer(foo$x)
Я не знаю, как изменить это, чтобы я мог указывать имена столбцов в переменной.
Если я инициализирую foo как фрейм данных следующим образом:
foo = data.frame(x=c("1", "2"))
тогда работает исходный вариант foo[,x]
, что заставляет меня поверить, что это что-то о типе вещей, возвращаемых read_tsv
.
Это показывает кучу вещей:
> str(foo)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 2 obs. of 1 variable:
$ x: int 1 2
- attr(*, "spec")=List of 2
..$ cols :List of 1
.. ..$ x: list()
.. .. ..- attr(*, "class")= chr "collector_integer" "collector"
..$ default: list()
.. ..- attr(*, "class")= chr "collector_guess" "collector"
..- attr(*, "class")= chr "col_spec"
Я использую R 3.3.2 и dplyr 0.5.0.
tibble NEWS
: Tibbles также явно разграничить[
и[[
:[
всегда возвращает другую таблицу,[[
всегда возвращает вектор.. - person Henrik   schedule 27.03.2017[[
;foo[['x']] <- as.integer(foo[['x']])
. Также описано в комментариях к первому сообщению, на которое указал @imo. - person Henrik   schedule 27.03.2017