データフレーム中の3列目の要素がdefと一致する行の2列目と3列目を書き換える関数を作成しました
R
1change.name <- function(def, cname, scname, data = data){ 2 data[data[,3] == def, 2] <- scname 3 data[data[,3] == def, 3] <- cname 4 return(data) 5}
しかし以下のエラーメッセージが出て動作しません
R
1Error in data[data[, 3] == def, 2] <- scname : 2 promise already under evaluation: recursive default argument reference or earlier problems? 3
どうすれば解決できるでしょうか
def, dataの内容はどうなっていますか?
ちょっとやってみましたがエラーは再現されませんでした。
defは文字列、dataはcsvファイルから読み込んだ以下のようなデータフレームです
Family Scientific.Name Common.Name Ave..Identity
Length:36 Length:36 Length:36 Min. : 99.40
Class :character Class :character Class :character 1st Qu.:100.00
Mode :character Mode :character Mode :character Median :100.00
Mean : 99.96
3rd Qu.:100.00
Max. :100.00
Ave..LOD Water.area Habitat DepthS
Length:36 Length:36 Length:36 Min. : 0.000
Class :character Class :character Class :character 1st Qu.: 0.000
Mode :character Mode :character Mode :character Median : 1.000
Mean : 3.867
3rd Qu.: 5.000
Max. :15.000
NA's :21
DepthD X40.Mizuta.TamaRiver.retry.01_S40_L001
Min. : 3.0 Min. : 0
1st Qu.: 9.0 1st Qu.: 0
Median : 20.0 Median : 0
Mean :121.4 Mean : 246
3rd Qu.:124.0 3rd Qu.: 0
Max. :600.0 Max. :1934
NA's :25
dataはどこまでが1行でどこまでがカラムの区切りはどこでしょうか。できればそのCSVファイルの中身を先頭数行でいいですから教えてください。
あと、cname, scnameはどう定義されていますか。
summaryではわかりにくかったのでstrで出力したものをのせます。
str(data[1:12])
'data.frame': 83 obs. of 12 variables:
$ Family : chr "074_Anguillidae" "095_Engraulidae" "097_Clupeidae" "097_Clupeidae" ...
$ Scientific.Name : chr "Anguilla japonica" "Engraulis japonicus" "Konosirus punctatus" "Sardinella zunasi" ...
$ Common.Name : chr "ウナギ" "カタクチイワシ" "コノシロ" "サッパ" ...
$ Ave..Identity : num 100 100 100 99.8 100 ...
$ Ave..LOD : chr "HIGH" "HIGH" "HIGH" "HIGH" ...
$ Water.area : chr "FBS" "S" "BS" "S" ...
$ Habitat : chr "demersal" "pelagic-neritic" "pelagic-neritic" "pelagic-neritic" ...
$ DepthS : int 1 0 NA 5 NA NA NA NA 5 NA ...
$ DepthD : int 400 400 NA NA NA NA NA NA NA NA ...
$ X01.Mizuta.TamaRiver.51_S1_L001: num 0 0 5299 36 0 ...
$ X02.Mizuta.TamaRiver.52_S2_L001: num 31 0 435 0 0 0 0 0 0 0 ...
$ X03.Mizuta.TamaRiver.53_S3_L001: num 263 0 0 0 0 0 30 0 22 0 ...
以上のように2、3行目は文字列、関数に入力するcname, scnameはこちらもいずれも文字列にしています。
