2013-06-05 50 views
0

這裏是什麼,我想做一個要點:半徑誤差:一個向量長度錯誤,應該是2

我有2個數據幀:
X(ID是唯一的)

id   timestamp 
282462839 2012-12-05 10:55:00 
282462992 2012-12-05 12:08:00 
282462740 2012-12-05 12:13:00 
282462999 2012-12-05 12:48:00 

Y(ID不是唯一的)

id   value1 value2 
282462839 300  100 
282462839 300  200 
282462839 400  300 
282462999 500  400 
282462999 300  150 

我也有一個功能MYFUNC(ID,p值),其計算的東西,根據P值和其他value1s(比更復雜的返回值2值之一隻是pvalue == value1)

我想爲包含相應的計算的myfunc(id,pvalue)的x創建第3列,其中pvalue是一個常量(比如20)的整數。

所以在本質上,我想這樣做:

x$t20 <- myfunc(x$id,20) 

我嘗試使用lappy上和sapply這樣:

x$t20 <- sapply(as.vector(x$id),myfunc,pvalue=20) 

我使用lapply並沒有as.vector嘗試爲好,但我一直得到這個錯誤:

Error in .pointsToMatrix(p2) : Wrong length for a vector, should be 2 

它的工作原理時,我只是表示它只是複製$ t20中的$ id。

我該怎麼做?

編輯1: 這裏MYFUNC的骨架:

myfunc <- function(xid,pvalue) { 
    result <- subset(y,id==xid) 
    retVal <- -1 
    if(nrow(result) < 12){ 
    return(NaN) 
    } 
    for(i in (1:nrow(result))){ 
    #code to process result 
    } 
    return(retVal) 
} 
+0

如果你的函數'myfunc'是矢量化的'x $ t20 < - myfunc(x $ id,20)'應該返回你想要的。 – DrDom

+0

如果我這樣做,它會給我一個錯誤: .pointsToMatrix(p2)中的錯誤:向量的長度錯誤,應該是2 另外:警告消息: 在id == xid: 較長的對象長度不是短物體長度的倍數。 我的實際定義是MYFUNC(XID,p值) 有一條線在那裏我做: 結果< - 子集(Y,ID == XID) 我試圖改變它XID [1],但仍然給了向量長度應該是2個錯誤 – orderof1

+0

看來問題出在功能上,請編輯你的文章並添加'myfunc'的代碼。 – DrDom

回答

1

這是非常困難的,幫助沒有完全代碼,但這裏有一些提示。首先,您可以獲得應該處理的id的邏輯向量,然後使用矢量化的ifelse統計量。

tmp <- table(y$id) >= 12 
y$t20 <- ifelse(tmp[as.character(y$id)], your_new_func(), NaN) 
+0

哦!由於在R中沒有關於發生錯誤的地方的詳細解釋,我假設它是通過傳遞參數或子集部分來做的事情!我想我找到了錯誤發生的地方!它並沒有打動我,它可能是與內部的功能!非常感謝! – orderof1

+0

錯誤可能是由您隱藏的代碼引起的,因爲您的原始功能適用於我,並且只會回覆警告消息。在R中最好避免使用向量化函數。 – DrDom