簡體   English   中英

R:二進制運算符的原始非數字參數中的錯誤

[英]R: Error in .Primitive, non-numeric argument to binary operator

我對類似的SO問題做了一些閱讀,但無法弄清楚如何解決我的錯誤。

我編寫了以下代碼字符串:

points[paste0(score.avail,"_pts")] <- 
    Map('*', points[score.avail], mget(paste0(score.avail,'_m')) )

本質上,我在“點”數據框中有一個列列表,由“ score.avail”定義。 我將每個列乘以各自的常量,定義為paste0(score.avail, '_m')表達式。 它根據paste0(score.avail, "_pts")paste0(score.avail, "_pts")表達式給定)添加新字段。

在類似的設置中,我之前沒有使用過此功能。 但是,我現在收到以下錯誤:

Error in .Primitive("*")(dots[[1L]][[1L]], dots[[2L]][[1L]]) : 
  non-numeric argument to binary operator

我很確定R告訴我我要相乘的字段之一不是數字。 但是,我已經檢查了所有字段,它們都是數字。 我什至嘗試運行as.numeric(score.avail)但這無濟於事。 我還運行了以下命令以刪除字段中的NA(在上面的Map函數之前)。

for(col in score.avail){
  points[is.na(get(col)) & (data.source == "average" | 
data.source ==  "averageWeighted"), (col) := 0]}

讓我感到困擾的是,這種表達方式以前沒有出現問題。

更新

通過分離出原始功能的每個組件,我進行了更多的挖掘工作。 運行points[score.avail]時得到奇怪的輸出。 以前,當我運行它時,它將僅返回我所有行的列。 但是,現在,我在原始數據框中沒有任何行-而是將'score.avail'列表中的列名稱作為行插入並在所有位置填充NA(這顯然是我的來源問題)。

我認為這是因為我使用的對象是設置了keyvars的data.table。 以前,使用此功能之前,我一直在指向數據框。

請嘗試其他一些事情。

另一個更新

我可以通過使用as.data.frame()復制'points'對象來解決我的問題。 但是,我將保留這個問題,看看是否有人知道如何重置數據表鍵vars,以便上面指定的功能可以正常工作。

我可以通過使用as.data.frame()復制“點”對象來解決我的問題。 顯然將該對象歸類為data.table引起了我的頭痛。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM