2012-05-28 2 views
-2

Я хочу просто конвертировать из float32 в 16b с коэффициентом масштабирования 10. Я должен получить файлы размером 507kb (720 * 360 * 2) не 131kb. Любая помощь?Я получаю 131 kb вместо 507 kb

dir1 <- list.files("C:\\New folder (13)", "*.img", full.names = TRUE) 
results <- list() 
for (.files in seq_along(dir1)){ 
    file2 <- readBin(dir1[.files], double(), size = 4, n = 360*720, signed = TRUE) 
    results[[length(results) + 1L]] <- file2[file2 != -9999]*10 
    fileName <- sprintf("C:\\SWdown_200001_%d.bin", .files) 
    writeBin(as.integer(results[[.files]]), fileName, size = 2) 
} 

ответ

2

Каждый элемент в файле 'file2', который равен -9999, не будет присутствовать в результатах [[. Files]]. Похоже, что примерно 3/4 элементов в файле 'file2' равны этому значению. Возможно, вы хотите назначить другое значение этим элементам, вместо того, чтобы отбрасывать их при назначении результатов [[...]].

Чтобы сделать то, что вы хотите, попробуйте следующее:

file2[file2 != -9999] <- file2[file2 != -9999]*10 
results[[length(results) + 1L]] <- file2; 
+0

на самом деле я хотел, чтобы исключить их из умножения на 10. Как решить эту –

+0

См отредактированный ответ. –

+1

или 'results [[length (results) + 1L]] <- ifelse (file2! = - 9999, file2 * 10, -9999)' –

Смежные вопросы