1 回答

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
當(dāng)您嘗試為不存在的變量或R不能視為的變量賦值時(shí),會(huì)發(fā)生這些錯(cuò)誤name。(名稱是保存變量名稱的變量類型。)
要重現(xiàn)錯(cuò)誤,請(qǐng)嘗試:
1:2 <- 1
## Error in 1:2 <- 1 : target of assignment expands to non-language object
1 <- 1
## Error in 1 <- 1 : invalid (do_set) left-hand side to assignment
mean() <- 1
## Error in mean() <- 1 : invalid (NULL) left side of assignment
(您能猜出三個(gè)錯(cuò)誤中的哪個(gè)NULL <- 1返回了嗎?)
R的一個(gè)鮮為人知的功能是您可以為字符串分配值:
"x" <- 1 # same as x <- 1
如果您嘗試使用更復(fù)雜的表達(dá)式(例如)來構(gòu)造字符串,則此方法將無(wú)效paste。
paste0("x", "y") <- 1
## Error: target of assignment expands to non-language object
看到
在R中創(chuàng)建帶有“ paste”的變量名?以及
如何動(dòng)態(tài)命名變量?
解決方案是使用assign:
assign(paste0("x", "y"), 1)
出現(xiàn)這種情況的常見情況是嘗試分配給數(shù)據(jù)幀的列。通常會(huì)嘗試將paste()作業(yè)的左手放在一起,即
paste0("my_dataframe$","my_column") <- my_value
通常,這里的最佳解決方案不是求助于get或assign要記住,我們可以使用[or [[運(yùn)算符通過字符變量來引用數(shù)據(jù)框列:
x <- "my_column"
my_dataframe[,x] <- value #or...
my_dataframe[[x]] <- value
同樣,您無(wú)法分配的結(jié)果get。
get("x") <- 1
## Error in get("x") <- 1 :
## target of assignment expands to non-language object
解決方案是
assign("x", 1)
或簡(jiǎn)單地
"x" <- 1
將get()與替換函數(shù)一起使用可處理與替換函數(shù)結(jié)合的更復(fù)雜的情況get。
使用magrittr包裝時(shí),意外的尾隨管道操作員也可能導(dǎo)致此錯(cuò)誤。
library(magrittr)
x <- 1 %>%
y <- 2
## Error in 1 %>% y <- 2 :
## target of assignment expands to non-language object
又見中的R語(yǔ)言分配其答案詳細(xì)一些相關(guān)的任務(wù),特別是R語(yǔ)言定義的描述的奧秘的子集分配。
- 1 回答
- 0 關(guān)注
- 2201 瀏覽
添加回答
舉報(bào)