data.table
numaralı bir sütunu, aynı data.table
numaralı başka bir sütunun değerleri aracılığıyla çalıştırarak düzenlemeye çalışıyorum. Ancak, bunu yaptığımda, aşağıdaki hatayı alıyorum: Error in eval(expr, envir, enclos) : object 'y' not found
. Aşağıda, bunun kendi kodumda gerçekleştiği basit bir durum yaptım. Sadece DT[,y]
, hatta DT[,y[7]]
yazabilirsiniz olarakHatada hata (expr, envir, muhafaza): nesne bulunamadı
n = c(2, 3, 5)
s = c("aa", "bb", "cc", "dd", "ee")
b = c(TRUE, FALSE, TRUE, FALSE, FALSE)
x = list(n, s, b, 3, c(n,s), b, 5)
DT <- data.table(grp=c("a","a","b","b","b","c","c"), foo=1:7, bar=x, y=rep("", length(x)))
for (i in 1:nrow(DT)) {
if (DT[grp[i]=="a"]) {
DT[,y[i]:= c(x[[i]], x[[5]][i]]
}
}
Ancak açıkça y
, bulunmaktadır. Bu neden oluyor?
DÜZENLEME: Gerçek kod, buradaki örneklerden biraz daha karmaşıktır; for döngüsü kullanarak sıkışmış hissediyorum nedeni, if
deyiminin sonucuna dayanarak, x[i+n]
değerleri boyunca çalıştırmak için while
ifadesini kullanıyorum, tüm x[i]
değerini y[i]
durma koşulu karşılanana kadar ekleyin. Böylece yinelemeli elementin önemli olduğunu hissediyorum. Eğer data.table bütün y
sütununun yerini isterseniz y
sütunun bir alt kümesini değiştirmek istiyorsanız,
DT[ , y:= x ]
kullanmak
Bunu mu demek istediniz: 'DT [, y: = x]'? – andrechalom
Ahh, kesinlikle çok basit olan önceki örnek için kesinlikle haklıydın. Bunu gerçek problemin biraz daha temsilcisiyim. – mlinegar
(bunun neden çalışmadığına dair daha fazla neden var, ancak esas olarak) 'y [i] 'diye adlandırılan sütun yok; atomik olarak düşünüyorsunuz ve – eddi