использование С-кода в R

Sep 26, 2015 10:43

Написал R-программу для выделения сигнала от мигрирующих птиц из исходных данных погодных радаров. Изначально алгоритм разработал Adriaan Dokter, я просто включил его С-код в свою программу. Для этого нужно скомпилировать С-код, получить в результате компиляции .exe файл и из R отправлять этот экзешник на испольнение в системную командную строку.
В работе С мне помог разобраться очень толковый парень из ЛИТМО Виталий Козлов.

####### Process weather radar data (.h5 format) with C-code from Adriaan Dokter
### written by VK, 20150922

library(reshape2) # for function colsplit

### set the input and output folders manually
input_wd <- "X:/22_sonstige_Projekte/14_0209_a_ENRAM_Aktivitaeten/WeatherRadarData_Stevns/enram/2009/11"
output_wd <- "X:/22_sonstige_Projekte/14_0209_a_ENRAM_Aktivitaeten/WeatherRadarData_Stevns/processed/200911"

setwd(input_wd)
getwd()
list_files <- list.files(recursive = T, pattern=".h5")
list_files
list_files[1]
length(list_files)

### version with iterated input files
# set working directory that containes compiled .exe file
#setwd("c://test")
#home = getwd()
#home
i<-1
i
list_files[i]
# create container to combine results
container <- NULL
# iterate files with original data
for(i in 1:length(list_files)) {
# for(i in 1:10) {
#list_files[i]
# extract name of the file from the path
vars <- colsplit(list_files[i], "/", c("day", "file_name"))
vars$file_name
file_name <- vars$file_name

### set the path to .exe file manually
exe_file <- "X:/22_sonstige_Projekte/14_0209_a_ENRAM_Aktivitaeten/Adriaans_C_code/compiled_exe_on_Vlad_computer/vol2birdprof_ODIM_h5.exe"
input <- paste(input_wd, "/", list_files[i], sep="")
input
output <- paste(output_wd, "/out_", file_name, sep="")
output
#command = paste("vol2birdprof_ODIM_h5", input, output, sep=" ")
command = paste(exe_file, input, output, sep=" ")
command

### run .exe file in system command line and save results in R-object "a"
a<- system(command, intern=TRUE)
a
# find first row with bird migration data
start_row <- which(a == "#Date Time Heig Uwind Vwind Speed Direc Wwind Count StdDev dBZAll dBZBird Precip") + 1
start_row
# copy bird data to a separate object
a_df <- as.data.frame(a[start_row:length(a)])
# add original file name
a_df$file_name <- file_name
a_df
#a_df <- a[start_row:length(a)]
#str(a_df)
#head(a_df)
#str(a)
#length(a)
#a[14:length(a)]

# add bird data to a container
container <- rbind(container, a_df)
write.table(a, paste(output_wd, "/out_txt_", file_name, ".txt", sep=""))
}
str(container)
head(container)
container

программирование, программы, радары, миграции птиц, работа, r

Previous post Next post
Up