我将通过提醒"回收"是什么来启动我的问题,为此,我将引用另一个用户(re:Brian Diggs关于标准回收规则实施的问题):
R的一个很好的特征与其固有的矢量化特性有关,它是2.2节中的R简介中描述的循环规则.
在同一表达式中出现的载体不必全部具有相同的长度.如果不是,则表达式的值是一个向量,其长度与表达式中出现的最长向量相同.表达式中较短的向量经常根据需要(可能是分数)再循环,直到它们与最长向量的长度匹配.特别是简单地重复常数.
我同意回收是一个很好的功能,它使生活更容易.但我知道很多人也认为它很危险,我明白了他们的观点:有时候,如果R可以警告你,例如,当你试图将一个向量添加到一个矩阵时会很好,因为它不是最自然的事情.
我的问题:是否有可能让R在回收时发出警告?
目前,R只会在什么时候发出警告longer object length is not a multiple of shorter object length
.我希望在所有情况下都会发出警告.我已经调查options
但没有运气.
我想在R中执行一个简单的操作,可以在excel中轻松完成:
我有一个由5045个名为K的条目组成的col.我想创建第二个col L,其中第一个值是L1 = 100 + K [1],第二个是L2 = L1 + K [2],第三个是L3 = L2 + K [3]等.
在R中有一个简单的方法吗?在Excel中,只需要拉下col.
我正在尝试编写一个具有如下参数的函数:
myfunction<-function(id){
print(paste(id, ".", "csv", sep=""))
}
Run Code Online (Sandbox Code Playgroud)
当id值类似于009时,它将其打印为9.csv而不是009.csv.
我试过这个:
id<-as.character(id)
Run Code Online (Sandbox Code Playgroud)
这不起作用.有什么建议?
我的首要问题是,R如何在WLS案例中计算R ^ 2?它不仅仅对观测值进行加权,然后计算R ^ 2.为了解决这个问题,我正在浏览源代码,直到我在代码中遇到这个问题lm.wfit
:
z <- .Call(C_Cdqrls, x *wts, y*wts, tol)
Run Code Online (Sandbox Code Playgroud)
在这做什么?有谁知道如何访问代码以获取详细信息?即,返回的是z
什么?如何C_Cdqrls
,x*wts
,y*wts
,tol
被使用?
到目前为止我所理解的(我不确定它是否正确),这.Call
意味着R在C中执行此代码.但是,如果可能的话,我想看看如何在C中完成此操作.
谢谢!
我怎么"1330"
变成"13:30"
或"133000"
变成"13:30:00"
?基本上,我想在每对数字之间插入一个冒号.我正在尝试将字符转换成时间.
似乎应该有一种非常优雅的方式来做到这一点,但我想不到它.我想使用的某种组合的paste()
和substr()
,而是一种优雅的解决方案是逃避我.
编辑:需要转换的示例字符串:
X <- c("120000", "120500", "121000", "121500", "122000", "122500", "123000") #example of noon to 12:30pm
Run Code Online (Sandbox Code Playgroud) 我有一个列表,我想将其转换为带有两列的data.frame.问题是列表元素的长度不相等,这是我的数据的外观示例:
my.list
$A1CF
[1] "A1CF" "APOBEC1" "CUGBP2" "KHSRP" "SYNCRIP" "TNPO2"
$A2LD1
[1] "A2LD1" "PRPSAP2" "RPL15" "TANC1"
$A2M
[1] "A2M" "ADAM19" "ADAMTS1" "AMBP" "ANXA6" "APOE"
Run Code Online (Sandbox Code Playgroud)
此列表来自以前的data.frame:
my.list <- split(df$V2, df$V1)
df
V1 V2
1 A1BG A1BG
2 A1BG CRISP3
3 A1CF A1CF
4 A1CF APOBEC1
5 A1CF CUGBP2
6 A1CF KHSRP
7 A1CF SYNCRIP
8 A1CF TNPO2
9 A2LD1 A2LD1
10 A2LD1 PRPSAP2
11 A2LD1 RPL15
12 A2LD1 TANC1
13 A2M A2M
14 A2M ADAM19
15 A2M ADAMTS1
16 A2M AMBP …
Run Code Online (Sandbox Code Playgroud) A是具有暗淡100*100*100*100的4维阵列.我想从A的最后两个维度中选择10000个子矩阵.B和C是长度为10000的向量.它们是选择标准.B指定A的行号,C指定列号.
A <- array(rnorm(100^4), dim=c(100,100,100,100))
B <- sample( nrow(A) , 10000 , repl = TRUE )
C <- sample( ncol(A) , 10000 , repl = TRUE )
D <- array(0, dim=c(10000,100,100))
Run Code Online (Sandbox Code Playgroud)
使用for循环:
system.time(
for ( i in 1:10000 ){
D[i,,] <- A[B[i],C[i],,]
})
user system elapsed
10.20 0.14 10.34
Run Code Online (Sandbox Code Playgroud)
与mapply:
sub_array <- function(b,c) return(A[b,c,,])
system.time(D <- mapply(FUN = sub_array, B, C, SIMPLIFY='array'))
user system elapsed
9.77 3.75 29.17
Run Code Online (Sandbox Code Playgroud)
这甚至更慢.有更快的方法吗?谢谢.
我使用以下内容拟合模型:
mymodel <- glm(LS ~ bs(LA, df = 8) + bs(IN, df = 7),
family = binomial, data = mydata, na.action = na.omit)
Run Code Online (Sandbox Code Playgroud)
没问题,我现在有模型适合我试图提取使用的结点.我跟着一篇关于使用attr
和提取结点的帖子str
.那是一个只是样条的模型.我认为这个结在某种程度上就在结构中
我打电话str(mymodel$terms)
有..-attr(*, "variables")
.我无法继续前进,attr
但我相对肯定这基本上是我需要做的.任何获得结的指导都表示赞赏.
我想制作一个基本的分析工具,收集时间戳并用注释产生运行时间.唯一的问题是我无法在不使用全局变量的情况下弄清楚如何做到这一点.实现我想要实现的功能的"正确"方法是什么?如果R已经内置了这个功能,那真是太棒了,但我真正想要弄清楚的是如何避免使用全局变量并编写更强大的代码.
timeStamps = c()
runTimes = list()
appendRunTimes <- function(note) {
if(length(timeStamps) < 1) {
timeStamps <<- Sys.time()
}
else {
timeStamps <<- c(timeStamps, Sys.time())
diff <- timeStamps[length(timeStamps) ] - timeStamps[length(timeStamps) - 1]
runTimes <<- c(runTimes, format(diff))
names(runTimes)[length(runTimes)] <<- note
}
}
appendRunTimes('start')
Sys.sleep(4)
appendRunTimes('test')
Run Code Online (Sandbox Code Playgroud) 我有一组数据,例如:
x<-c(1, 2, 3, 4, 5, 6)
y<-c(100, 110, 121, 133.1, NA, 161.051)
Run Code Online (Sandbox Code Playgroud)
现在,y
显然以 10% 的恒定速度增长。
我希望能够在 处插入数据x=5
,并且我想打印146.41
作为答案。但是,这个函数似乎并没有这样做:
approx(x,y,5)
Run Code Online (Sandbox Code Playgroud)
这会打印147.0755
,这不是我正在寻找的答案。
approx(x,y,5,method="constant")
Run Code Online (Sandbox Code Playgroud)
也不行。
我哪里错了?