DESCRIPTION
tập tin
My package 's có httr
trong chỉ thị nhập khẩu của nó:Làm thế nào để ghi đè lên chức năng xuất khẩu từ gói R liệt kê trong Nhập khẩu
Imports:
httr (>= 1.1.0),
jsonlite,
rstudioapi
httr
exports an S3method cho length.path
.
S3method(length,path)
Và nó defined as:
#' @export
length.path <- function(x) file.info(x)$size
Trong gói của tôi, tôi có các đối tượng mà tôi gán lớp "con đường" để. Mỗi lần tôi gán lớp "con đường" đối với bất kỳ đối tượng, bất kể có hay không mà tôi từng gọi length()
trên đối tượng, điều này được in để stdout:
Error in file.info(x) : invalid filename argument
Dưới đây là một số mã tái sản xuất tất cả mọi người có thể chạy:
> sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.5 (El Capitan)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] tools_3.3.1
> thing = 1:5
> class(thing) = 'path'
> requireNamespace('httr')
Loading required namespace: httr
> sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.5 (El Capitan)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] httr_1.2.1 R6_2.1.2 tools_3.3.1
> thing = 1:5
> class(thing) = 'path'
Error in file.info(x) : invalid filename argument
tôi đã cố gắng bắt nó trong một try
nhưng điều đó không làm việc:
set_class = function(obj, c) {
class(obj) = c
return(obj)
}
thing = 1:5
thing = try(set_class(thing, 'path'), silent=TRUE)
Sản lượng:
Error in file.info(x) : invalid filename argument
Tôi đã thử assignInNamespace
để ghi đè lên các chức năng:
base_length = function(obj) {
return(base::length(obj))
}
assignInNamespace('length.path', base_length, 'httr')
thing = 1:5
class(thing) = 'path'
Nhưng tôi nhận được Error: evaluation nested too deeply: infinite recursion/options(expressions=)?
Khi tôi sử dụng httr
chức năng trong gói của tôi, tôi sử dụng chúng với httr::function
vì vậy tôi không chắc chắn cách chức năng length.path
này bị rò rỉ vào không gian tên của tôi và ghi đè hàm chiều dài cơ sở. Tôi cũng đã thử rõ ràng @importFrom httr function
cho mỗi chức năng mà tôi sử dụng thay vì sử dụng httr::function
nhưng điều đó không hoạt động.
Tôi cũng thấy điều này:
https://support.bioconductor.org/p/79059/
Nhưng giải pháp dường như là để chỉnh sửa mã nguồn của httr
, mà tôi không thể làm được kể từ khi gói hàng nhập khẩu của tôi nó. Làm sao để tôi có được xung quanh này?
Nếu 'length()' là một generic, thì bạn muốn gọi 'base :: length.default()' để lấy phương thức mặc định. – Thomas
Vấn đề là tôi không bao giờ gọi chiều dài. Điều này xảy ra khi tôi gọi class (obj) = 'path' –
Tôi nghĩ 'class (obj) = 'path'' chỉ đưa ra một lỗi trong RStudio hoặc các IDE tương tự, nơi bạn có thể nhìn thấy đầu ra của' str (...) 'cho biến không gian làm việc của bạn mọi lúc. Khi bạn gán một lớp mới, IDE sẽ cập nhật mô tả này và gọi 'length' trong tiến trình. Trong "bình thường" RGui lỗi không xảy ra. – AEF