2015-03-24 2 views
0

Я пишу простую функцию, которая принимает два аргумента (состояние, результат). State используется для подмножества данных в дальнейшем.Передача аргументов в функции и области переменных в R

Сказав это, часть требования состоит в том, что состояние представляет собой вектор длиной 2 символа. Мне нужно написать больше кода, чтобы гарантировать, что переданное состояние соответствует этому требованию.

Так что я написал следующее:

best <- function(state, outcome) { 

    outcome <- read.csv("outcome-of-care-measures.csv", colClasses = "character") 
    state <- vector(mode = "character", length = 2) 
    st.checkTbl <- outcome[8] 

    state 
    } 

Однако, когда я вызываю функцию и передать аргументы:

best("AXA") or best("FOO") or even best("TX") or best(AL) 

Все, что я получить обратно есть: "" ""

Если я прокомментирую #state < - ..., то он полностью передает аргумент и печатает «FOO» или «AXA» или «TX» и т. Д.

Как я могу гарантировать, что аргумент, переданный функции, сохраняется как переменная (состояние) в функции? Или, я так переоцениваю это? На самом деле я просто хотел проверить, что то, что я передаю аргументу состояния, можно распечатать для тестирования.

. Извините за 101 урок.

+0

Похоже, вы передумали.Кроме того, не совсем ясно, что должна делать эта функция, поскольку все, что она вернет, это пустой вектор символов или, если вы закомментируете строку, исходное значение, которое вы указали для 'state'. Вы можете указать раздел «написать свои собственные функции» в разделе [Введение в R-руководство] (http://cran.r-project.org/doc/manuals/r-release/R-intro.html#Writing- своя собственная функция). – Thomas

+0

Независимо от того, что вы положили для состояния, вы переопределите его с помощью 'state <- vector (...)' внутри функции –

+0

Томас, я думаю, вы правы. Я слишком задумываюсь о том, что R просто знает, что делать с моим аргументом штата. Я пытаюсь понять, как он знает, куда отправить значение состояния и доказать себе, что он фактически делает то, что я хочу, чтобы он делал. – Zach

ответ

1

Вы, как правило, читать ваши данные вне какой-либо функции, например, так:

outcome.data <- read.csv("outcome-of-care-measures.csv", colClasses = "character") 

В противном случае, поскольку функция имеет свои собственные namespace, все переменные, определенные внутри него исчезнет после его возвращения, если не они сами возвращаются функцией с return(...). Несколько объектов могут быть возвращены путем помещения их в список: return(list(item1=var1, item2=var2)).

Некоторые функции, такие как assign, имеют параметр envir, который может быть установлен на .GlobalEnv, чтобы изменить это поведение. Изменение объекта также может выполняться внутри функции с помощью оператора <<- вместо <-, хотя эта практика обычно рекомендуется против.

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

  1. Каковы его входы
  2. Что это делает
  3. Что он возвращает

Не полезно, например, использовать outcome в качестве параметра функции, а затем прочитать в переменной с именем income содержимое файла csv. Ваш аргумент тогда бесполезен, поскольку он будет написан. Вот почему вам пришлось прокомментировать строку, определяющую переменную state внутри функции, чтобы фактически использовать state, поскольку она была получена функцией.

Это, безусловно, не ответит на все ваши вопросы, но, надеюсь, это поможет вам прояснить некоторые вещи. В остальном есть много хороших обучающих программ, чтобы узнать дальше о том, как программировать в R и как/когда использовать функции. Удачи и счастливого обучения!

+0

Хотя полезно, я не думаю, что этот совет отвечает главным вопросом OP, который о переменной области. – Thomas

+0

Вы правы. Я добавил немного объяснений по этому поводу. Надеюсь, ОП найдет его полезным, даже если не полностью удовлетворительным в качестве ответа. –

+0

Отличная помощь, хотя @DominicComtois и я ценю это. Мне очень нравится R, и я учусь любить все эти данные! Итак, вы бы рекомендовали функцию, которая считывает все мои данные, а затем передавая эти переменные в функцию, которая их сжимает? – Zach

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