2013-08-28 3 views
1

Я создал пользовательскую функцию с 3 параметрами. Во время вызова функции, если я случайно Кодирую значение, как указано в строке, которая комментировал все работает хорошо, но если я пытаюсь сделать использование параметров я получаю следующее сообщение об ошибке:Передача параметров пользовательской функции

Warning message: 
In `[<-.data.frame`(`*tmp*`, data$X == "Key1", , value = list(X = integer(0), : 
    provided 17 variables to replace 16 variables 

Данные кадр данных содержит 16 колонн !!!

код используется:

Change <- function('Arc', Value, 'Key1'){ 

    data<-read.csv("matrix.csv") 

    #This statement works but the below does not ...... 
    #data[data$'X'=='C1',]$'OGB_OGB' <-(data[data$'X'=='C1',]$'OGB_OGB'/Value) 

    data[data$'X'=="Key1",]$"Arc" <-data[data$'X'=="Key1",]$"Arc"/Value  
    return(data) 
} 

tes<-Change("OGB_OGB",.3,"C1") 

Я предполагаю, что где-то я Мессинг струны parameters..please помочь

+1

Я очень su что ваш отказ от функции не возвращал ошибку вдоль строк 'непредвиденная строковая константа в Change <- function ('Arc'' – mnel

ответ

1

Вы не можете определить функцию

foo <- function('a') {'a'} 

Это вернет ошибка

foo <- function('a'

Итак, вы даже не создаете функцию.

При создании функции с использованием function, вы должны передать ему список именованных аргументов,

т.е.. что-то вроде foo <- function(a){} или foo <- function(a = 1){}, если вы хотите присвоить ему значение «по умолчанию».

Внутри функции вы ссылаетесь на аргументы, используя names (symbols не character strings)

Вы также получили отличный пример состояние (312)

library(fortunes) 
fortune(312) 

The problem here is that the $ notation is a magical shortcut and like any other magic if used incorrectly is likely to do the programmatic equivalent of turning yourself into a toad. -- Greg Snow (in response to a user that wanted to access a column whose name is stored in y via x$y rather than x[[y]]) R-help (February 2012)

Поэтому ваша функция может быть что-то как

Change <- function(Arc,Value, key = 'Key1') { 

data<-read.csv("matrix.csv") 
# calculate the logical vector only once 
# slightly more efficient 
index <- data[['X']]==key 
# you might consider index <- data[['X']] %in% key 
# if you wanted more than one value in `key` 
# replace as appropriate 
data[[Arc]][index] <- data[[Arc]][index]/Value 
# return the data 
return(data) 
} 


tes<-Change(Arc = "OGB_OGB",Value = .3,key = "C1") 
+1

У вас должно быть' fortune (312) 'on speed dial. – thelatemail

+0

@thelatemail - я процитировал это достаточно часто ... – mnel

+0

Спасибо, что так много ..... Изменить <- function ('Arc', Value, 'Key1') была опечатка ..i, предназначенная для изменения <- функция (дуга, значение, ключ1) – user2723635

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