我对R很新,但我只是想对向量Y中的元素进行简单的条件重新分配。但是,当重新分配处理积分时,我会不断收到警告消息。这是完整的代码:
> rm(list=ls())
> Y <- c()
> for (k in 1:20) {
+ Y[k] <- k
+ }
> for (k in 1:20) {
+ if (Y[k] < 12) {
+ Y[k] <- cos(3 * k)
+ } else {
+ Y[k] <- integrate(function(t) sqrt(t), lower = 0, upper = k)
+ }
+ }
其中一条警告信息:
Warning messages:
1: In Y[k] <- integrate(function(t) sqrt(t), lower = 0, upper = k) :
要替换的项目数不是替换长度的倍数
返回的Y: [[1]] [1] -0.9899925
[[2]]
[1] 0.9601703
[[3]]
[1] -0.9111303
[[4]]
[1] 0.843854
[[5]]
[1] -0.7596879
[[6]]
[1] 0.6603167
[[7]]
[1] -0.5477293
[[8]]
[1] 0.424179
[[9]]
[1] -0.2921388
[[10]]
[1] 0.1542514
[[11]]
[1] -0.01327675
[[12]]
[1] 27.71282
[[13]]
[1] 31.24811
[[14]]
[1] 34.92214
[[15]]
[1] 38.72984
[[16]]
[1] 42.66667
[[17]]
[1] 46.72854
[[18]]
[1] 50.91169
[[19]]
[1] 55.21273
[[20]]
[1] 59.62849
此外,我有点好奇为什么输出被分解为每个元素的两个数字。通常我习惯于向量输出看起来像这样:
[1] 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38
[20] 40
所以对我做错的任何澄清都非常感谢。
答案 0 :(得分:2)
让我告诉你如何缩短你的代码:
Y <- numeric(20)
Y[1:12] <- cos(3 * (1:12))
Y[13:20] <- sapply(13:20, function (u) integrate(sqrt, lower = 0, upper = u)$value )
答案 1 :(得分:0)
结果:
integrate(function(t) sqrt(t), lower = 0, upper = k)
是一个列表。
在插入[[1]]
向量之前,您需要使用Y
抓取每个列表条目的第一个元素:
Y <- c()
#for (k in 1:20) { # This loop is unnecessary
# Y[k] <- k # as it will be overwritten
#} # with cos(3 * k) subsequently
for (k in 1:20) {
if (Y[k] < 12) {
Y[k] <- cos(3 * k)
} else {
Y[k] <- integrate(function(t) sqrt(t), lower = 0, upper = k)[[1]]
}
}