से rbind()/cbind() रूपांतरण से बचें, मैं इसे प्लॉट करने से पहले एक डेटासेट बनाने की कोशिश कर रहा हूं। मैं समारोह कारखाने gammaplot.ff()
उपयोग करने का फैसला और मेरे कोड के पहले संस्करण इस प्रकार है:संख्यात्मक से कारक
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))
बाहर कर देता है, पूरे डेटा फ्रेम चरित्र डेटा होता है, तो मैं इसे वापस मैन्युअल रूप से परिवर्तित करने के लिए है (मेरे लिए कुछ समय लिया पहली जगह में खोजें!)। तो खोज indicates यह ऐसा होता है क्योंकि टाइप चर वर्ण है। से बचने के लिए इस (! आप डेटा सेट के निर्माण, जबकि चरित्र डेटा पर प्रदर्शन के मुद्दों कल्पना कर सकते हैं) मैं कोड कुछ बदल:
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)
}
}
यह मेरे लिए ठीक काम करता है, लेकिन मैं एक आत्म व्याख्यात्मक चरित्र पैरामीटर, खो दिया है जो एक नकारात्मक पक्ष है। क्या फ़ंक्शन फैक्ट्री का पहला संस्करण चरित्र के सभी डेटा के अंतर्निहित रूपांतरण के बिना रखने का कोई तरीका है?
यदि एक ही परिणाम प्राप्त करने का एक और तरीका है, तो मुझे इसे आजमाने में खुशी होगी।
@ थॉमस, आपका संक्षिप्त उत्तर स्पष्ट रूप से गलत है; स्वीकृत उत्तर देखें। साथ ही, यह बताते हुए कि आपको बिना किसी विकल्प के कुछ करना चाहिए रचनात्मक नहीं है। –