Преобразование типа столбца из read_tsv в R?

Я хотел бы программно преобразовать тип столбца в фрейм данных 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.


person dfrankow    schedule 27.03.2017    source источник
comment
Так хотят авторы пакета. На прошлой неделе или около того был подобный (возможно, повторяющийся) вопрос. Все согласны с тем, что на объект tbl_df нужно ссылаться особым образом (это не data.frame). Этот пост также может быть дубликатом.   -  person lmo    schedule 27.03.2017
comment
Соответствующее чтение из tibble NEWS: Tibbles также явно разграничить [ и [[: [ всегда возвращает другую таблицу, [[ всегда возвращает вектор..   -  person Henrik    schedule 27.03.2017
comment
Вот пост с прошлой недели.   -  person lmo    schedule 27.03.2017
comment
Спасибо! Если вы отправляете, это функция, а не ошибка. Преобразуйте объект во фрейм данных в качестве ответа, я приму его.   -  person dfrankow    schedule 27.03.2017
comment
Или, как я пытался описать в своем комментарии, используйте [[; foo[['x']] <- as.integer(foo[['x']]). Также описано в комментариях к первому сообщению, на которое указал @imo.   -  person Henrik    schedule 27.03.2017
comment
Спасибо @Henrik, в итоге я использовал это.   -  person dfrankow    schedule 28.03.2017