将参数传递给用户定义的函数

时间:2013-08-28 01:55:00

标签: r user-defined-functions

我用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")

我猜我正在弄乱字符串参数......请帮忙

1 个答案:

答案 0 :(得分:1)

您无法定义功能

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

这将返回错误

  

foo&lt; - function('a'

所以你甚至没有创建一个函数。

使用function创建函数时,必须传递一个命名参数列表

即。类似foo <- function(a){}foo <- function(a = 1){}的内容,如果你想给它一个“默认”值。

在函数中,您使用names引用参数(symbols而非character strings

你也有一个很好的例子财富(312)

library(fortunes)
fortune(312)
  

这里的问题是$符号是一个神奇的   如果使用不正确,快捷方式和任何其他魔法一样   可能做的程序相当于转弯   你自己变成了蟾蜍。       - Greg Snow(回应想要的用户         通过x $ y访问名称存储在y中的列         而不是x [[y]])         R-help(2012年2月)

因此,您的功能可能类似于

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")