我想查看一个函数的源代码,看看它是如何工作的.我知道我可以通过在提示符下键入其名称来打印函数:
> t
function (x)
UseMethod("t")
<bytecode: 0x2332948>
<environment: namespace:base>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,是什么UseMethod("t")意思?我如何找到实际使用的源代码,例如:t(1:10)?
有没有当我看到之间的差异UseMethod,当我看到standardGeneric和showMethods,与with?
> with
standardGeneric for "with" defined from package "base"
function (data, expr, ...)
standardGeneric("with")
<bytecode: 0x102fb3fc0>
<environment: 0x102fab988>
Methods may be defined for arguments: data
Use showMethods("with") for currently available ones.
Run Code Online (Sandbox Code Playgroud)
在其他情况下,我可以看到正在调用R函数,但我找不到这些函数的源代码.
> ts.union
function (..., dframe = FALSE)
.cbind.ts(list(...), .makeNamesTs(...), dframe = dframe, union = TRUE)
<bytecode: 0x36fbf88>
<environment: namespace:stats>
> .cbindts
Error: object '.cbindts' …Run Code Online (Sandbox Code Playgroud) 在回答另一个问题时,@ Mayk发布了以下解决方案:https://stackoverflow.com/a/10432263/636656
dat <- structure(list(product = c(11L, 11L, 9L, 9L, 6L, 1L, 11L, 5L,
7L, 11L, 5L, 11L, 4L, 3L, 10L, 7L, 10L, 5L, 9L, 8L)), .Names = "product", row.names = c(NA, -20L), class = "data.frame")
`levels<-`(
factor(dat$product),
list(Tylenol=1:3, Advil=4:6, Bayer=7:9, Generic=10:12)
)
Run Code Online (Sandbox Code Playgroud)
哪个产生输出:
[1] Generic Generic Bayer Bayer Advil Tylenol Generic Advil Bayer Generic Advil Generic Advil Tylenol
[15] Generic Bayer Generic Advil Bayer Bayer
Run Code Online (Sandbox Code Playgroud)
这只是矢量的打印输出,所以要存储它你可以做得更加困惑:
res <- `levels<-`(
factor(dat$product),
list(Tylenol=1:3, Advil=4:6, Bayer=7:9, Generic=10:12)
)
Run Code Online (Sandbox Code Playgroud)
显然这是对level函数的某种调用,但我不知道这里做了什么.这种巫术的术语是什么,我如何在这个领域增加我的魔法能力?
在编程语言R中,恰恰是什么意思
'['
Run Code Online (Sandbox Code Playgroud)
它在以下代码部分中充当sapply()和lapply()的参数:
dd <- data.frame(
A = c(1L, 2L, 3L),
B = c(4L, 5L, 6L),
C = c("X1=7;X2=8;X3=9",
"X1=13;X2=14",
"X1=5;X2=1;X3=8")
)
namev <- function(x) {
a <- strsplit(x,"=")
setNames(sapply(a,'[',2), sapply(a,'[',1))
}
vv <- lapply(strsplit(as.character(dd$C),";"), namev)
nm <- unique(unlist(sapply(vv, names)))
#extract data from all rows for every column
nv <- do.call(rbind, lapply(vv, '[', nm))
Run Code Online (Sandbox Code Playgroud)
dd $ C [1] X1 = 7; X2 = 8; X3 = 9 X1 ;; X1 = 13; X2 = 14
级:X1 ;; X1 = 13; …
我有一个列表输出,看起来像这个片段:
[[1]]
[1] 109
[[2]]
integer(0)
[[3]]
[1] 80
Run Code Online (Sandbox Code Playgroud)
有没有办法将其转换为这种格式?
C1 C2
1 109
2 0 (or NA)
3 80
Run Code Online (Sandbox Code Playgroud)
不知道从哪里开始...如果我取消它,我注意到我失去了整数(0)位置,这对我来说很重要.