【问题标题】:Loop not changing values in dataframe - R [closed]循环不改变数据框中的值 - R [关闭]
【发布时间】:2016-03-11 23:37:44
【问题描述】:

我有一个运行良好的循环,但输出仅在控制台中返回,数据框保持未修改。

  • 在循环结束时,head(data) 在控制台中返回,在预期列中生成预期值
  • 但是,这在原始数据帧中没有改变,我希望值出现在其中(打印头(数据)现在给我原始值,而不是循环创建的新值)

示例代码:

df <- cbind(x,y)
myfun <- function(z){
    counter <- 0
    for (i in 1:z) {
    counter <- 1 + counter
        for (j in 1:5) {
        counter <- 1 + counter
            if (condition_a){
                df[counter,2] <- 0
            }
            if (condition_b){
                df[counter,2] <- 1
            }
        }
    }
    return(head(df))
    newdf <- df[,2]
}

我错过了什么?

值是 int 类,这有关系吗?

【问题讨论】:

  • 请提供一个可重现的例子。见How to Ask
  • 您对细节很了解。需要包含可重现的示例和您的代码。
  • 请添加您的数据集,解释您要做什么并提供所需的输出。我们可以通过告诉使用&lt;&lt;- 之类的东西来解决您的本地问题,但我相信您的整个方法是不正确的,如果没有所有这些不必要的循环,当然也可以不使用&lt;&lt;-,这可以更容易地解决。跨度>
  • 可能我太新了,不知道这一点,如果您能提供提示,我将不胜感激!

标签: r loops dataframe


【解决方案1】:

如果您真的想在函数之外更改某些内容,那么您可以使用df[counter,2] &lt;&lt;- 1,它将在您的函数之外更改df 的值。

但是,这不是很好的做法,因为每次运行该函数时,您的 df 数据框都会发生变化。而是查看返回值。此外,您可能可以做一些简化来代替循环,以使您的代码运行得更快。我附上了一个示例,向您展示无论如何您将如何做您想做的事情。

x <- c(0, 1, 2, 3)
y <- c(0, 1, 2, 3)

df <- data.frame(x, y)     

a<-function(){
 df[,2] <<- c(0, 0, 0, 0) 
}

b<-function(){
  df[,2] <- c(0, 0, 0, 0) 
}

b()

df

a()

df

【讨论】:

  • 谢谢,确实有效!
猜你喜欢
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2019-03-27
  • 2022-01-12
  • 1970-01-01
  • 2022-12-18
相关资源
最近更新 更多