向量和 Ifelse 逻辑 - 不会填充向量
Vectors & Ifelse Logic - Won't Populate Vector
我正在创建一个接受两个输入的函数:增量和长度。该函数修改现有向量 - 让我们称这个向量为基础 - 通过增量 'length' 指定元素。
我需要创建一个新向量,我们称之为 'adjusted'。这个经过调整的向量需要根据一个条件进行填充:如果基向量的索引值小于函数输入中指定的长度参数,那么我想将所有小于长度的元素的基向量增加增量。基向量中大于指定长度参数的所有元素都将保持与基向量中的相同。
这是我的代码示例:我尝试以两种方式实现逻辑。
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 很陌生,任何见解都将不胜感激。
编辑:根据一些建议,我能够 return 输出。唯一的问题是 'adjusted' 向量现在是索引向量长度的 2 倍。我看到发生这种情况是因为有两个计算,一个在 if 值中为真,一个在 if 值中为假。但是,我希望函数写入仅在索引小于参数长度的元素中调整的向量。
例如。假设索引向量为 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)
}
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)
这个 returns 一个向量,其所有值 < indexVALUE 来自增量添加的基本向量。
使用一点布尔代数如何:
adjusted <- base + delta*(base > length)
我正在创建一个接受两个输入的函数:增量和长度。该函数修改现有向量 - 让我们称这个向量为基础 - 通过增量 'length' 指定元素。
我需要创建一个新向量,我们称之为 'adjusted'。这个经过调整的向量需要根据一个条件进行填充:如果基向量的索引值小于函数输入中指定的长度参数,那么我想将所有小于长度的元素的基向量增加增量。基向量中大于指定长度参数的所有元素都将保持与基向量中的相同。
这是我的代码示例:我尝试以两种方式实现逻辑。 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 很陌生,任何见解都将不胜感激。
编辑:根据一些建议,我能够 return 输出。唯一的问题是 'adjusted' 向量现在是索引向量长度的 2 倍。我看到发生这种情况是因为有两个计算,一个在 if 值中为真,一个在 if 值中为假。但是,我希望函数写入仅在索引小于参数长度的元素中调整的向量。
例如。假设索引向量为 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)
}
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)
这个 returns 一个向量,其所有值 < indexVALUE 来自增量添加的基本向量。
使用一点布尔代数如何:
adjusted <- base + delta*(base > length)