錯誤:分配目標擴充套件為非語言物件
我收到錯誤
Error in <my code> : target of assignment expands to non-language object
要麼
Error in <my code> : invalid (do_set) left-hand side to assignment
要麼
Error in <my code> : invalid (NULL) left side of assignment
這是什麼意思,我該如何防止呢?
name
處理時,會出現這些錯誤.(名稱是一個變數型別,用於儲存變數名.)
要重現錯誤,請嘗試:
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
(你可以猜測NULL<-1返回的三個錯誤中的哪一個) R的一個鮮為人知的功能是可以為字串賦值:
"x" <- 1 # same as x <- 1
如果您使用例如
paste
使用更復雜的表示式嘗試構造字串,則此操作不起作用.
paste0("x", "y") <- 1 ## Error: target of assignment expands to non-language object
看到
解決方案是使用
assign
:
assign(paste0("x", "y"), 1)
出現這種情況的常見情況是嘗試分配給資料幀列時.通常會嘗試將()一起貼上在分配的左手,即
paste0("my_dataframe$","my_column") <- my_value
通常,這裡的最佳解決方案不是訴諸於獲取或分配,而是要記住,我們可以使用[or [[operator:
x <- "my_column" my_dataframe[,x] <- value #or... my_dataframe[[x]] <- value
類似地,您無法分配給
get
的結果.
get("x") <- 1 ## Error in get("x") <- 1 : ##target of assignment expands to non-language object
解決方案是
assign("x", 1)
或簡單地
"x" <- 1
Using get() with replacement functions 處理更復雜的情況,結合替換功能.
另請參閱Assignment in R language 的答案,詳細介紹了與作業相關的一些奧祕,特別是R語言定義對Subset Assignment 的描述.
http://stackoverflow.com/questions/27662162/error-in-my-code-target-of-assignment-expands-to-non-language-object