在一個(gè)群里,看到一位朋友發(fā)了一堆代碼,

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