Ну, простыми словами:
Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.
Итак, как это решить:
if (i == null) {
// Handle this
}
Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);
Вероятно, это зависит от деталей движка рендеринга на каждой платформе, которые могут быть трудно модифицировать. Мои предложения (непроверенные из-за нехватки времени и доступа к Windows):
cairoDevice
и используйте Cairo_png()
. Согласно документации: blockquote>This functions the same as any other R graphics device. You may use the conventional plot commands and expect essentially the same output, except that everything is anti-aliased (similar to other vector-based devices like Quartz). Alpha-blending is supported, as is enhanced interactivity via ‘getGraphicsEvent’. The device should work the same across all supported platforms (Mac, Windows, and Linux).
- Измените PNG с гораздо более высоким разрешением (или выведите данные из R в формате PDF) и используйте ImageMagick (
convert
) или какой-либо другой инструмент для получения сглаженной версии.
Используйте векторное устройство, такое как pdf. Сначала убедитесь, что у вас есть эта возможность, и поэтому неудивительно, что функция capabilities
- это то, что нужно проверить. Если у вас есть pdf, просто выполните это:
pdf(file="out_graph.pdf")
s3d <-scatterplot3d(wt,disp,mpg, pch=16, highlight.3d=TRUE,
type="h", main="3D Scatterplot")
fit <- lm(mpg ~ wt+disp)
s3d$plane3d(fit)
dev.off()
Альтернативой для веб-вывода может быть графическое устройство png (). Он получает высокие оценки для компактности и совместимости с веб-браузером, хотя это растровый формат.
Установка cairoDevice
больше не нужна для использования Каира с устройствами png
. Теперь вы можете указать type='cairo'
при открытии устройства. Сравните следующее:
png('test1.png', 500, 500)
s3d <- scatterplot3d(wt,disp,mpg, pch=16, highlight.3d=TRUE,
type="h", main="3D Scatterplot")
fit <- lm(mpg ~ wt+disp)
s3d$plane3d(fit)
dev.off()
png('test2.png', 500, 500, type='cairo')
s3d <- scatterplot3d(wt,disp,mpg, pch=16, highlight.3d=TRUE,
type="h", main="3D Scatterplot")
fit <- lm(mpg ~ wt+disp)
s3d$plane3d(fit)
dev.off()
Я запускаю Win 8.1 и 64-бит R 3.2.2.
Вам не нужно проходить через файлы, вы можете просто установить cairoDevice, как было предложено Ben Bolker, а затем вызвать функцию Cairo (), которая даст вам полностью сглаженное окно сюжета под Windows (хотя и медленнее).