我用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")
我猜我正在弄乱字符串参数......请帮忙
答案 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")