R read.table <-> write.table - PullRequest
       10

R read.table <-> write.table

2 голосов
/ 27 января 2012

В R:

d=read.table(filename, as.is = TRUE, header = TRUE, sep = "\t", row.names = 1)

Какая команда для записи того же файла из d?

write.table(d, ?)

Я приведу один пример входного файла:

one two
1   2

Разделитель "\ t".Каковы параметры write.table, которые будут записывать точно такой же выходной файл после чтения его с read.table?

Спасибо, Грегор

Ответы [ 2 ]

5 голосов
/ 27 января 2012

Проблема в том, что ваш read.table использовал столбец 1 как row.names, поэтому он потерял имя своего столбца ("один"). Когда вы пишете это, вы должны сделать что-то особенное, чтобы вернуть «одно» имя.

cbind(one=row.names(d), d) добавит row.names в виде столбца с именем «one». Тогда вам просто нужно отключить использование row.names и кавычек и указать разделитель:

# Create the test file
filename <- "test.txt"
filename2 <- "test2.txt"
cat("one\ttwo\n1\t2\n", file=filename)

# read it in
d <- read.table(filename, as.is = TRUE, header = TRUE, sep = "\t", row.names = 1)

# write it out again
write.table(cbind(one=row.names(d), d), filename2, row.names=FALSE, sep="\t", quote=FALSE)

# Ensure they are the same:
identical(readLines(filename), readLines(filename2)) # TRUE

readLines(filename)
readLines(filename2)

ОБНОВЛЕНИЕ Чтобы избежать жесткого кодирования имени первого столбца, его нельзя терять при загрузке:

# Read the data without any row.names
d <- read.table(filename, as.is = TRUE, header = TRUE, sep = "\t", row.names = NULL)
# Then use the first column as row.names (but keeping the first column!)
row.names(d) <- d[[1]]
d
#  one two
#1   1   2        

# Now you can simply write it out...
write.table(d, filename2, row.names=FALSE, sep="\t", quote=FALSE)

# Ensure they are the same:
identical(readLines(filename), readLines(filename2)) # TRUE

Конечно, вы все равно можете удалить столбец 1, если сохраните его название и используете его, как в первом примере.

1 голос
/ 27 января 2012
write.table(d,"filename")

Вы должны указать, какое расширение файла вы хотите использовать. Надеюсь, что это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...