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、名前付き引数のリストを渡す必要があります。

すなわち。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 に答える