Создание Automatin в R - PullRequest
       7

Создание Automatin в R

1 голос
/ 02 июля 2011

Я создал скрипт, который анализирует набор необработанных данных и преобразует их во множество различных форматов на основе различных параметров и функций.У меня есть еще 152 необработанных таблицы данных, но все, что мне нужно будет сделать, это использовать свой скрипт на каждом.Однако могут быть случаи, когда я решу, что мне нужно изменить переменную или параметр, и я хотел бы придумать список параметров в верхней части моей электронной таблицы, который мог бы повлиять на остальные функции в моем скоро, чтобы быть очень большимскрипт.

  1. Глобальные переменные не являются решением этой проблемы, это лучше всего иллюстрируется на следующем примере:

    exceedes <- function (L=NULL, R=NULL)
    {
    
    if (is.null(L) | is.null(R)) 
    {
    print ("mycols: invalid L,R.")
    return (NULL)               
    }
    options (na.rm = TRUE)
    test <-(mean(L, na.rm=TRUE)-R*sd(L,na.rm=TRUE))
    test1 <- ifelse(is.na(L), NA, ifelse(L > test, 1, 0))
    return (test1)
    }
    
    L=ROCC[,2]
    R=.08
    ROCC$newcolumn <- exceedes(L,R)
    names(ROCC)[names(ROCC)=="newcolumn"]="Exceedes1"
    
    L=ROCC[,2]
    R=.16
    ROCC$newcolumn <- exceedes(L,R)
    names(ROCC)[names(ROCC)=="newcolumn"]="Exceedes2"
    
    L=ROCC[,2]
    R=.24
    ROCC$newcolumn <- exceedes(L,R)
    names(ROCC)[names(ROCC)=="newcolumn"]="Exceedes3"
    

Итак, в приведенном вышеНапример, я хотел бы иметь способ в верхней части моего сценария изменить диапазон R и повлиять на остальную часть сценария, потому что эта функция будет повторяться 152 раза.Единственный способ сделать это - копировать и вставлять функцию снова и снова с разными переменными каждый раз и устанавливать ее глобально.Но я должен представить, что есть более простой способ, возможно, нужно перестроить мою функцию?

  1. Имена файлов и выходные имена.Я не уверен, возможно ли это, но скажу, например, что все мои input.csv имеют формат, в котором один набор данных будет называться 123, другой будет 124, еще 125 и т. Д., И тогда R получит информацию о том, чтобы взять следующий набор данных,и затем вывести этот набор данных в определенную папку на моем компьютере, без необходимости вводить read.csv (file = "123.csv"), а затем записать .csv (пример, file = "123.csv) и т. д.?

  2. Общее форматирование сценария автоматизации Прежде чем я углублюсь в свою автоматизацию, моя процедура должна была скопировать и пропустить сценарий 152 раза, а затем изменить имя файла и имя вывода для каждого1. Это звучит смешно, но с моим отсутствием навыков программирования я не уверен, что это лучший способ изменить его. Любые идеи?

Спасибо всем заранее за помощь.

1 Ответ

3 голосов
/ 02 июля 2011

Вы можете перезапустить функцию с различными параметрами, построив вектор паремтеров (скажем, R)

R <- c(seq(0.1, 1, by = 0.01))

, а затем запустить exceedes функцию length(R) раз, используя sapply.

exceedes <- function(R, L) {} #notice the argument order
sapply(X = R, FUN = exceedes, L = ROCC[, 2])

Вы можете передать другие аргументы своей функции (например, file.name) и использовать ее для создания любого имени файла, которое вам нужно.

...