在一個群里,看到一位朋友發(fā)了一堆代碼资锰,
以及一個報(bào)錯信息,Error in paste(.....) :could not find function "paste←" (還有一個target of assignment expands to non-language object)
他非常不理解,為什么壳繁,明明paste的用法沒錯,sum的操作也沒有錯荔棉,但是代碼卻出錯了呢闹炉?
這個報(bào)錯,在我剛學(xué)習(xí)R語言的時候润樱,也遇到過渣触。當(dāng)時,我也想著手動構(gòu)建一個變量名壹若,然后給它賦值嗅钻,方便后面調(diào)用,就跟我在shell腳本的操作一樣店展。
但實(shí)際上养篓,這在R里面是行不通的,因?yàn)檫@相當(dāng)于讓一個字符串充當(dāng)變量名赂蕴,最簡單的報(bào)錯就是 paste("a",1) <- sum(1:10)
其實(shí)柳弄,為一個值賦予一個名字,不是非得要變量名 = 變量值 這種形式概说,你可以用列表碧注,數(shù)據(jù)框嚣伐,命名向量。舉個例子萍丐,你計(jì)算了一堆值轩端,每個值對應(yīng)一個基因,下面演示錯誤和正確的形式
# 錯誤形式
genename <- c("a","b","c","d", "f")
## 假設(shè)你計(jì)算的結(jié)果是x
x <- c(1:5)
for (i in seq(length(genename))){
# 想為每個基因名創(chuàng)建一個變量名逝变,是不可行的
paste(genename[i]) <- x[i]
}
# 正確形式
genename <- c("a","b","c","d", "f")
x <- c(1:5)
x
for (i in seq(length(genename))){
# 將基因名
names(x)[i] <- genename[I]
}
x
假如你計(jì)算的結(jié)果不是一個數(shù)值基茵,而是一個數(shù)據(jù)框,那么我們可以用列表(list)來存放變量
genename <- c("a","b","c","d", "f")
result <- list()
for (i in seq(length(genename))){
# 隨便算一個data.frame
df <- data.frame()
# 列表復(fù)制
result[[genename[i]]] <- df
}
result
即便最開始的代碼可行骨田,也是非常糟糕的耿导,因?yàn)槟愫苡锌赡苌纱罅磕阕约憾疾恢獣缘淖兞俊?/p>