numarasına kaçının. Çizmeden önce bir veri kümesi oluşturmaya çalışıyorum. Ben fonksiyon fabrika gammaplot.ff()
kullanmaya karar ve benim kodunun ilk sürümü şuna benzer:Rbind()/cbind() dönüşümü nümerik değerden
PowerUtility1d <- function(x, delta = 4) {
return(((x+1)^(1 - delta))/(1 - delta))
}
PowerUtility1d <- Vectorize(PowerUtility1d, "x")
# function factory allows multiparametrization of PowerUtility1d()
gammaplot.ff <- function(type, gamma) {
ff <- switch(type,
original = function(x) PowerUtility1d(x/10, gamma),
pnorm_wrong = function(x) PowerUtility1d(2*pnorm(x)-1, gamma),
pnorm_right = function(x) PowerUtility1d(2*pnorm(x/3)-1, gamma)
)
ff
}
gammaplot.df <- data.frame(type=numeric(), gamma=numeric(),
x=numeric(), y=numeric())
gammaplot.gamma <- c(1.1, 1.3, 1.5, 2:7)
gammaplot.pts <- (-1e4:1e4)/1e3
# building the data set
for (gm in gammaplot.gamma) {
for (tp in c("original", "pnorm_wrong", "pnorm_right")) {
fpts <- gammaplot.ff(tp, gm)(gammaplot.pts)
dataChunk <- cbind(tp, gm, gammaplot.pts, fpts)
colnames(dataChunk) <- names(gammaplot.df)
gammaplot.df <- rbind(gammaplot.df, dataChunk)
}
}
# rbind()/cbind() cast all data to character, but x and y are numeric
gammaplot.df$x <- as.numeric(as.character(gammaplot.df$x))
gammaplot.df$y <- as.numeric(as.character(gammaplot.df$y))
bütün veri çerçevesi karakter verileri içeren, çıkıyor, bu yüzden elle geri dönüştürmek zorunda (biraz zaman aldı Bunu ilk etapta keşfet!). indicates SO arama bu tür türünde bir karakter olduğu için oluşur. Bu (! veri seti inşa ederken karakter verilerine performans sorunları tahmin edebilirsiniz) önlemek için ben kod biraz değişti:
gammaplot.ff <- function(type, gamma) {
ff <- switch(type,
function(x) PowerUtility1d(x/10, gamma),
function(x) PowerUtility1d(2*pnorm(x)-1, gamma),
function(x) PowerUtility1d(2*pnorm(x/3)-1, gamma)
)
ff
}
for (gm in gammaplot.gamma) {
for (tp in 1:3) {
fpts <- gammaplot.ff(tp, gm)(gammaplot.pts)
dataChunk <- cbind(tp, gm, gammaplot.pts, fpts)
colnames(dataChunk) <- names(gammaplot.df)
gammaplot.df <- rbind(gammaplot.df, dataChunk)
}
}
Bu benim için çalışıyor, ama kendi kendini açıklayıcı bir karakter parametresi, kaybettiği bir dezavantaj. Tüm verilerin karaktere kapalı bir dönüşümü olmadan işlev fabrikasının ilk sürümünü tutmanın bir yolu var mı?
Aynı sonucu elde etmenin başka bir yolu varsa, bunu denemek isterim.
@Thomas, kısa cevabınız açıkça yanlış; kabul edilen cevaba bakınız. Ayrıca, alternatifsiz bir şey yapmaman gerektiğini belirten yapıcı değildir. –