2015-05-13 13 views
5

Cách tránh "không thể tìm thấy hàm"% dopar% "" trong hàm của gói khi chỉ nhập (không phụ thuộc) foreach trong DESCRIPTION của một gói? là có một cách như foreach ::% dopar% như tôi sử dụng foreach :: foreach trong chức năng? Cảm ơn bạn.cách sử dụng% dopar% khi chỉ nhập foreach trong DESCRIPTION của gói

Mã như:

Trong chức năng

foreach::foreach(1:9) %dopar% { 

...} 

Trong MÔ TẢ

Imports: 
    Matrix, 
    parallel, 
    foreach, 
    doParallel 

Trả lời

3

Bạn cần phải sử dụng backticks: foreach::`%dopar%` (hoặc trích foreach::"%dopar%" cũng sẽ làm việc).

+1

Ông có thể làm rõ hơn một chút về cách gọi một cách rõ ràng% dopar%? Tôi đang cố gắng chạy những phần sau không hoạt động. 'foreach :: foreach (i = 1: 9, .combine =" + ") foreach :: \'% dopar% \ '{i}' và tôi đã thử kết hợp khác nhau với backticks, nhưng nó thường cho lỗi "biểu tượng không mong muốn". Cảm ơn! –

+0

@KevinZen Tôi không chắc chắn làm thế nào để tái tạo lỗi này, và tôi không nhớ bao giờ nhận được nó. Bạn có nhận được như vậy nếu bạn sử dụng dấu ngoặc kép? Điều gì về việc xác định một bí danh như '\'% dopar% \ '<- foreach :: \'% dopar% \ '' và sau đó chỉ cần sử dụng nó? – konvas

+0

Vâng, nếu tôi cố gắng và xác định hàm này một cách rõ ràng mà không cần sử dụng Roxygen2 thì cả backticks lẫn dấu ngoặc kép đều không hoạt động. Tôi nhận ra rằng tôi không cần phải lo lắng về 'foreach ::% dopar%' khi sử dụng Roxygen2. Nó hoạt động tốt chỉ với 'import (foreach)' –

4

@Kevin Zen,

Tôi đã có cùng một vấn đề, nhưng tôi nghĩ rằng tôi chỉ giải quyết nó bằng cách sử dụng trường "importFrom" trong tập tin namespace. Tôi sử dụng Roxygen2 tài liệu, vì vậy tôi chỉ đơn giản bao gồm các thẻ:

#' @importFrom foreach %dopar% 

với chức năng foreach được gọi trong Nó tạo ra một lĩnh vực trong file namespace như ví dụ:.

importFrom(foreach,"%dopar%") 

vì vậy nếu bạn aren không sử dụng Roxygen2, bạn chỉ có thể đặt dòng đó vào không gian tên của bạn và điều đó cũng nên làm điều đó.

Điều đó sẽ ngăn chặn việc kiểm tra tiếng than từ việc khiếu nại. Tuy nhiên, khi bạn cố gắng chạy mã trên một máy tính mà chưa có "foreach" gói nạp và gắn qua:

library(foreach) 

bạn sẽ nhận được một thông điệp rằng% dopar% không tìm thấy nếu "foreach "được liệt kê trong" Nhập "thay vì" Phụ thuộc "trong tệp DESCRIPTION của bạn. Vì vậy, hãy chắc chắn foreach được liệt kê trong trường "Phụ thuộc".

3

Làm việc sau đây cho tôi. Xác định một địa phương %do% hoặc %dopar% như sau

`%dopar%` <- foreach::`%dopar%` 
`%do%` <- foreach::`%do%` 

Sau đó, bạn sẽ có thể chạy

foreach::foreach(i = 1:9, .combine = "+") %dopar% {i} 
foreach::foreach(i = 1:9, .combine = "+") %do% {i} 
+0

Giải pháp này làm việc cho tôi, và những giải pháp khác ở đây thì không. Cảm ơn. –

Các vấn đề liên quan