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

我猜我在某个地方弄乱了字符串参数..请帮忙

4

1 回答 1

1

你不能定义一个函数

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

这将返回错误

foo <- 函数('a'

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

使用 创建函数时function,必须将命名参数列表传递给它,

IE。类似的东西,foo <- function(a){}或者foo <- function(a = 1){}如果你想给它一个“默认”值。

在函数中,您使用names( symbolsnot character strings)引用参数

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

library(fortunes)
fortune(312)

这里的问题是 $ 符号是一个神奇的快捷方式,如果使用不正确,就像任何其他魔法一样,很可能会产生相当于把自己变成蟾蜍的程序化效果。-- Greg Snow(响应用户希望通过 x$y 而不是 x[[y]] 访问名称存储在 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")
于 2013-08-28T02:14:29.270 回答