-1

列名の変更に苦労している一連のデータフレームがあります

for(i in c("ML","HL","MSMS","PEP","MqNormHM","MixHM","RawHM","AbsHM","SepAbsHM")){
  j<-ifelse(i %in% c("ML","HL","MSMS","PEP","MqNormHM"),paste("Rel",i,sep=""),i)
  colnames(get(j))<-paste(i,colnames(get(j)),sep="")
}

私に与えます:

Error in colnames(get(j)) <- paste(i, colnames(get(j)), sep = "") : 
  could not find function "get<-"

ML、HL などは、次の形式の個々のデータフレームです。

> head(RelML)
          AA       BB       CC       DD       EE      LL      MM      NN
2684 0.19650       NA       NA       NA       NA      NA      NA      NA
4470      NA       NA       NA       NA       NA 0.35249      NA 0.35797
3619 0.22108 0.098167 0.041080       NA       NA      NA      NA      NA
5422      NA       NA 0.052223       NA       NA      NA      NA      NA
1286      NA       NA       NA       NA 0.019568      NA 0.31137 0.34364
1918      NA       NA       NA 0.026735       NA      NA      NA      NA

すべての場合において、データフレームの colnames は次のように始まります。

> colnames(RelML)
[1] "AA" "BB" "CC" "DD" "EE" "LL" "MM" "NN"

そして、RelML データフレームの場合、最終的には次のようになります。

> paste("ML",colnames(RelML),sep="")
[1] "MLAA" "MLBB" "MLCC" "MLDD" "MLEE" "MLLL" "MLMM" "MLNN"

get(colnames(j)) 、 colnames(as.name(j)) などをいじってみましたが、何もうまくいかないようです。どんな助けでも大歓迎です。よろしくマッツ

4

2 に答える 2

1

get一発でその列に異議を唱えたり変更したりすることはできません。取得、変更、および再割り当てするには、これを複数のステートメントに分割する必要があります。

for (i in c("ML","HL","MSMS","PEP","MqNormHM",
            "MixHM","RawHM","AbsHM","SepAbsHM")) {
  j <- ifelse(i %in% c("ML","HL","MSMS","PEP","MqNormHM"),
              paste("Rel", i, sep = ""), i)
  o <- get(j)
  colnames(o) <- paste(i, colnames(o), sep = "")
  assign(j, o, envir = .GlobalEnv)
}

次のようにして、すべてをベクトル化し、少しきれいにすることができます。

z  <- c("ML","HL","MSMS","PEP","MqNormHM")
i  <- c("ML","HL","MSMS","PEP","MqNormHM","MixHM","RawHM","AbsHM","SepAbsHM")
j  <- ifelse(i %in% z, paste0("Rel", i), i)
o1 <- mget(j, envir = .GlobalEnv)
n1 <- lapply(o1, colnames)
n2 <- Map(paste0, i, n1)
o2 <- Map(`colnames<-`, o1, n2)

invisible(list2env(o2, .GlobalEnv))

ここで、通常の免責事項: に依存する必要があることはget/mgetassign通常、悪い習慣の兆候です。環境内に類似のオブジェクトを多数持つのではなく、それらをリストに格納してから、lapply(およびその他のもの) を使用してそれらをすべてまとめて処理する必要があります。

于 2013-11-01T17:06:18.170 に答える