向量和Ifelse逻辑 - 不会填充向量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了向量和Ifelse逻辑 - 不会填充向量相关的知识,希望对你有一定的参考价值。
我正在创建一个带有两个输入的函数:delta和length。该函数修改现有向量 - 让我们调用此向量基 - 用delta表示'length'指定元素。
我需要创建一个新的向量,让我们称它为“已调整”。调整后的这个向量需要根据一个条件进行填充:如果基向量的索引值小于函数输入中指定的长度参数,那么我想为所有小于长度的元素增加基矢量增量。基本向量中大于指定长度参数的所有元素将保持与基本向量中的相同。
这是我的代码示例:我试图以两种方式实现逻辑。 1.使用ifelse因为它允许矢量化输出。 2.使用if else逻辑。
adjusted <- vector() #initialize the vector.
#Create a function.
Adjustment <- function(delta, length) {
ifelse((index < length), (adjusted <- base + delta), (adjusted <- base))
head(adjusted)
}
#Method 2.
Adjustment <- function(delta, length) {
if (index < length) {
adjusted <- base + delta
}
else {adjusted <- base}
head(adjusted)
}
我遇到麻烦的地方是我新创建的矢量,调整后,不会填充。我不太确定发生了什么 - 我对R很新,任何见解都会非常感激。
编辑:给出一些建议,我能够返回输出。唯一的问题是'调整后的'向量现在是索引向量长度的2倍。我发现这种情况正在发生,因为有两个计算,一个在if值为true,另一个在if值为false。但是,我希望函数写入仅在索引小于参数长度的元素中调整的向量。
例如。假设索引向量为10.如果我将长度设置为3,我想调整以反映元素1:3的变化以及4:10的基础相同信息。
我的代码反映调整现在是长度20.我如何处理这个并保持向量的原始值?
adjusted <- c()
Adjustment <- function(delta, length) {
ifelse(index < length, adjusted <<- c(adjusted, base + delta), adjusted <<- c(adjusted, base))
head(adjusted)
}
答案
如何使用一些布尔代数:
adjusted <- base + delta*(base > length)
另一答案
Adjustment <- function(delta, length) {
if (index < length) {
for(i in 1:length-1){
adjusted[i] <- base[i] + delta
}
}
else {adjusted <- base}
head(adjusted)
}
index=2
length=5
base <- c(1,2,3,4,5,6,7,8,9,10)
delta = 2
Adjustment(delta,length)
这将返回一个向量,该向量具有从delta添加的基向量中的所有值<indexVALUE。
以上是关于向量和Ifelse逻辑 - 不会填充向量的主要内容,如果未能解决你的问题,请参考以下文章