Eğer bir fonksiyonun argümanını bir hata veya bir uyarı için deparse etmek isterseniz, argüman bir data.table içinde bir veri dosyasına dönüştürülürse garip bir şey olur. fonksiyonu: data.table
her şey iyi çalışır önce onu deparse Eğerdeparse (substitute()) argüman olarak data.table kullanılarak fonksiyon içinde
e <- data.frame(x = 1:10)
### something strange is happening
foo <- function(u) {
u <- data.table(u)
warning(deparse(substitute(u)), " is not a data.table")
u
}
foo(e)
## foo(e)
## x
## 1: 1
## 2: 2
## 3: 3
## 4: 4
## 5: 5
## 6: 6
## 7: 7
## 8: 8
## 9: 9
## 10: 10
## Warning message:
## In foo(e) :
## structure(list(x = 1:10), .Names = "x", row.names = c(NA, -10L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x10026568>) is not a data.table
:
### ok
foo1 <- function(u) {
nu <- deparse(substitute(u))
u <- data.table(u)
warning(nu, " is not a data.table")
u
}
## foo1(e)
## x
## 1: 1
## 2: 2
## 3: 3
## 4: 4
## 5: 5
## 6: 6
## 7: 7
## 8: 8
## 9: 9
## 10: 10
## Warning message:
## In foo1(e) : e is not a data.table
e
zaten bir data.table
veya eğer hiçbir fark yok arada bulunmamaktadır t. Bu amaçla, deparse
'un çok zaman alıcı olduğu için bazı kodları profillendirirken, e
oldukça büyük olduğu için bunu buldum.
Burada neler oluyor ve bu işlevleri data.frame
ve data.table
girişi için nasıl kullanabilirim?
nachti
@nachti, bu sizin sorunuza cevap vermiyor mu? – BrodieG
@ [BrodieG] (http://stackoverflow.com/users/2725969/brodieg): Cevabınız için teşekkürler. Yukarıda yazıldığı gibi: data.frame' ve 'data.table' için bu tür işlevleri nasıl ele alabilirim? Kopyalamalı mıyım (çok yer ihtiyacı var)? Ya da önce her şeyi tahsis et ve sonra üzerine yaz. – nachti
@ nachti, ikincisi, önce deparse. Ayrıca, kopyalardan kaçınmak istiyorsanız, 'data.table' yerine' setDT 'kullanmayı düşünmelisiniz. Eski referans ile bir veri tablosu oluşturur. – BrodieG