#r #list #file #for-loop #write.table
Вопрос:
Я пытаюсь записать список номеров, который создает этот цикл, в файл. Я, используя приведенный ниже код, смог это сделать, но результат не совсем то, что я ищу. Я знаю, что мне нужно использовать write.table, и его нужно сохранить как .dat
Кто-нибудь может сказать мне, почему «x» печатается между каждой строкой? **Что я получаю в файле:**
x
1800
x
1804
x
1808
x
и т. Д…
Чего я хочу:
1804
1808
1812
и т.д…
years <- seq(1800,2020)
for (i in years){
i_div_400 <- i%@0
if (i_div_400 == 0 amp; (i%%4 == 0 amp;amp; i%0 != 0)){
write.table(i, "file.dat", append=TRUE, sep=",", quote=FALSE)
}
}
Комментарии:
1. Вы уверены, что это тот результат, который вы получаете?
i_div_400 == 0
это верно только раз в 400 лет. Это не должно было ничего писать. Ноwrite.table
ожидает, что напишет data.frame с именами столбцов и тому подобным. Если вы просто хотите написать буквальное значение, подумайтеwriteLines()
об этом вместо этого. Кроме того, было бы более эффективно сгенерировать список значений, которые вы хотите записать, прежде чем вы его напишете.2. Извините, вы правы, я отправил не тот сотовый раньше. Я отредактировал сообщение с правильным кодом
3. Почему вы делаете
leap <- matrix(i)
, когда вы нигде не используетеleap
? Также я не понимаю, почему у вас есть два отдельныхif
условия, когда код внутри обоихif
условий абсолютно одинаков.4. эту матрицу следовало бы прокомментировать. если бы не работало как одна строка
Ответ №1:
Причина, по которой вы получаете «x» в выходных данных, заключается в том, что это имена столбцов по умолчанию при использовании write.table
. Если вы не хотите включать имя столбца в выходные данные, используйте col.names = FALSE
, и он будет печатать только цифры в выходных данных.
years <- seq(1800,2020)
for (i in years){
i_div_400 <- i%@0
if (i_div_400 == 0 || (i%%4 == 0 amp;amp; i%0 != 0)){
write.table(i, "file.dat", append=TRUE, sep=",",
row.names=FALSE, quote=FALSE, col.names = FALSE)
}
}
Также это может быть записано векторизованным способом без цикла.
write.table(years[years %% 400 == 0 | (years %% 4 == 0 amp; years %0 != 0)],
"file.dat", sep=",", row.names=FALSE, quote=FALSE, col.names = FALSE)