警告消息将值重新指定给R中的积分?
我对R很陌生,但我只是想对向量Y中的元素做一个简单的条件重新赋值。然而,当重新赋值处理积分时,我不断收到警告消息。以下是完整的代码:警告消息将值重新指定给R中的积分?,r,R,我对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] <
> 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)
+ }
+ }
此外,我有点好奇为什么输出也会被每个元素分成两个数字。通常我习惯于这样的矢量输出:
[1] 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38
[20] 40
因此,任何关于我做错了什么的澄清都是非常感谢的。以下结果:
integrate(function(t) sqrt(t), lower = 0, upper = k)
这是一份清单
在插入到Y
向量之前,需要使用[[1]]
获取每个列表项的第一个元素:
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]]
}
}
Y以下结果:
integrate(function(t) sqrt(t), lower = 0, upper = k)
这是一份清单
在插入到Y
向量之前,需要使用[[1]]
获取每个列表项的第一个元素:
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]]
}
}
Y让我告诉你如何缩短代码:
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 )
Y让我告诉你如何缩短代码:
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 )
Y放大@李哲源ZheyuanLi的评论:看看integrate(function(t)sqrt(t),lower=0,upper=k)的输出,它不仅仅是一个数字。啊,这很有道理,我想这只是我不理解integrate的输出的一个例子@李哲源ZheyuanLi的评论:看看integrate(function(t)sqrt(t),lower=0,upper=k)的输出,它不仅仅是一个数字。啊,这很有道理,我想这只是我不理解integrate的输出。啊,这非常有用,谢谢!我知道一定有更简单的方法来创建初始Y向量,而不使用for循环。我很好奇sapply做了什么?Lappy
和sapply
只是他们第一个论点中的项目循环。啊,这非常有用,谢谢!我知道一定有更简单的方法来创建初始Y向量,而不使用for循环。我很好奇sapply做了什么?lapply
和sapply
只是在它们的第一个参数中对项目进行循环。再次证明可以用任何语言编写Fortran代码。再次证明可以用任何语言编写Fortran代码。