为了提出功能请求,联系R核心团队的推荐方式/工作流程是什么?
通过"功能请求",我不仅仅意味着发出类似"我希望看到功能XY执行XY的东西,所以如果你继续为我实现这个功能会很酷",而是提出实际的代码.
我喜欢R,我愿意贡献,分享代码和所有.然而,有时我发现有点难以弄清楚究竟如何贡献;-)我看了R Project Developer Page并且多次使用r-devel邮件列表.特别是对于后者,我得到的印象是,它不是正确的地方/不希望用实际代码详细说明一个人的功能请求(有时可能不仅仅是两个班轮).所以我想知道是否有一种"更好"或更"系统"的方式来做到这一点.
我被要求提供一个简短的例子:
我正在广泛使用S4 Reference Classes并为我的对象实现了许多小实用程序功能.一个这样的效用函数是某种"重置"功能:
setRefClass(
"A",
fields=list(a="numeric", b="character"),
methods=list(
reset=function(fields=NULL, ...){
temp <- new("A")
if(is.null(fields)){
fields <- names(getRefClass("A")$fields())
}
sapply(fields, function(x){
.self$field(name=x, value=temp$field(x))
})
return(TRUE)
}
)
)
x <- new("A", a=1:10, b=letters[1:10])
x$a
x$b
x$reset(fields="a")
x$a
x$b
x$reset()
x$a
x$b
Run Code Online (Sandbox Code Playgroud)
很多时候,这不是世界上最精彩的功能,突然出现在我的"哦,那个缺失"列表中.此外,它可能是一种"单一"功能,开发整个包装有时感觉就像用大锤敲打坚果.
假设我在R中有两个向量,定义如下.
a = c(3,3,5)
b = c(2,4,6)
Run Code Online (Sandbox Code Playgroud)
是否有一个函数可以在元素a和元素之间给出成对最大值b,可以在公式中运行?
我试着做,max(a,b)但它没有得到所需的输出.
期望的输出:
(3,4,6)
Run Code Online (Sandbox Code Playgroud)
实际产量:
6
Run Code Online (Sandbox Code Playgroud) 我认为这是一个与data.table和:=函数的使用相关的非常简单的问题.我不认为我完全理解这种行为,:=而且经常遇到类似的问题.
这是一些示例数据
mat <- structure(list(
col1 = c(NA, 0, -0.015038, 0.003817, -0.011407),
col2 = c(0.003745, 0.007463, -0.007407, -0.003731, -0.007491)),
.Names = c("col1", "col2"),
row.names = c(NA, 10L),
class = c("data.table", "data.frame"))
Run Code Online (Sandbox Code Playgroud)
这使
> mat
col1 col2
1: NA 0.003745
2: 0.000000 0.007463
3: -0.015038 -0.007407
4: 0.003817 -0.003731
5: -0.011407 -0.007491
Run Code Online (Sandbox Code Playgroud)
我想创建一个名为col3的列,它给出col1和col2的总和.如果我使用
mat[,col3 := col1 + col2]
# col1 col2 col3
#1: NA 0.003745 NA
#2: 0.000000 0.007463 0.007463
#3: -0.015038 -0.007407 -0.022445
#4: 0.003817 -0.003731 …Run Code Online (Sandbox Code Playgroud) 这对于普通R用户来说可能是一个非常简单的问题,但我似乎无法找到解决方案.我想添加两个缺少数据的变量.
x1<-c(NA,3,NA,5)
x2<-c(NA,NA,4,3)
x3<-x1+x2
x3
[1] NA NA NA 8
但我真正想要的是:
[1] NA 3 4 8
Run Code Online (Sandbox Code Playgroud)
任何建议将不胜感激.我怎样才能保留NA?
我想对包含 NA 的向量求和。
例如:
a <- c(5, 3, 1, NA, 2)
b <- c(NA, 1, 2, 1, 7)
Run Code Online (Sandbox Code Playgroud)
预期输出将是:
[1] 5 4 3 1 9
Run Code Online (Sandbox Code Playgroud)
sum在这种情况下不起作用,sum(a, b, na.rm = T)相当于sum(c(a, b), na.rm = T).
+确实有效(即a + b)但不会删除NAs。
您可以使用rowSums(cbind(a, b), na.rm = T),但实际上这可能会导致代码混乱 - 例如,如果向量是data.table.
是否有等价的pmaxfor sum,例如psum(a, b, na.rm = T)?
我只会理解(对我来说)函数的奇怪行为rowSums.想象一下,我有这个超级简单的数据帧:
a = c(NA, NA,3)
b = c(2,NA,2)
df = data.frame(a,b)
df
a b
1 NA 2
2 NA NA
3 3 2
Run Code Online (Sandbox Code Playgroud)
现在我想要第三列,这是另外两列的总和.我不能仅仅 +因为NA:
df$c <- df$a + df$b
df
a b c
1 NA 2 NA
2 NA NA NA
3 3 2 5
Run Code Online (Sandbox Code Playgroud)
但是如果我使用计算为0 rowSums的行NA,而如果只有一行可以NA正常工作:
df$d <- rowSums(df, na.rm=T)
df
a b c d
1 NA 2 NA 2
2 NA NA NA 0
3 3 …Run Code Online (Sandbox Code Playgroud)