LINUX.ORG.RU

library в собранном руками пакете

 


0

1

Есть пакет S2.R

library(lattice)
Show = function()
  print(levelplot(array(c(1,2,3,1,2,3,1,2,3),dim = c(3,3))),useRaster = TRUE) 

Собираем его: package.skeleton(name = 'MyPackage',code_files = 'S2.R',force = TRUE)

Есть скрипт S1.R:

library(MyPackage)
Show() 

При запуске: source('S1.R')

получаем:

Ошибка в print(levelplot(array(c(1, 2, 3, 1, 2, 3, 1, 2, 3), dim = c(3, : не могу найти функцию «levelplot»

Не работает, даже если library(lattice) внести в тело Show

В чем проблема?


1. print(levelplot(array(c(1,2,3,1,2,3,1,2,3),dim = c(3,3)),useRaster = TRUE))

2. как то принято использовать require() а не library()

3. пакет указанная команда не собирает, а делает скелетон. собирает его

$ R CMD build MyPackage 
* checking for file ‘MyPackage/DESCRIPTION’ ... OK
* preparing ‘MyPackage’:
* checking DESCRIPTION meta-information ... OK
* checking for LF line-endings in source and make files
* checking for empty or unneeded directories
* building ‘MyPackage_1.0.tar.gz’

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

Исправил ошибку со скобками. Заменил library на require. Делаем скелетон:

package.skeleton(name = 'MyPackage',code_files = 'S2.R',force = TRUE)

# удаляем pd - файлы
for (path in list.files(path = './MyPackage/man/',pattern = '*.Rd'))
  unlink(paste('./MyPackage/man/',path,sep = ''))

Далее я устанавливал двумя путями:

system("R CMD INSTALL MyPackage")
или
$ R CMD build MyPackage
> install.packages("MyPackage_1.0.tar.gz")

В обоих случаях получаем:

> require(MyPackage)
Загрузка требуемого пакета: MyPackage
> Show()
Ошибка в print(levelplot(array(c(1, 2, 3, 1, 2, 3, 1, 2, 3), dim = c(3,  : 
  не могу найти функцию "levelplot"
Теперь:
> source('S2.R')
Загрузка требуемого пакета: lattice
> Show()

И на экране то, что хотелось.

EVP
() автор топика
Ответ на: комментарий от EVP

ну так и логично загружать все пакеты в основном приложении, иначе надо писать имя вызываемой функции в привязке к неймспейсу в котором она объявлена.

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

Ok, добавил import(lattice) в NAMESPACE-файл. Все заработало. А можно этого добиться без ручной правки NAMESPACE?

EVP
() автор топика
Ответ на: комментарий от EVP

?наверное в функцию запихать загрузку пакета?

но у всех пакетов намеспейсы (и их зависимости по сути) прописаны

psv1967 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.