【问题标题】:non-numeric argument to binary operator in apply function [duplicate]应用函数中二元运算符的非数字参数[重复]
【发布时间】:2019-11-20 18:48:08
【问题描述】:
    a <- data.frame(a=c("1","2","3"),b=c("1","2","3"))
    apply(a,1,function(x) {
      x["a"]<- as.numeric(x["a"])
      x["b"]<- as.numeric(x["b"])
      return(x["a"]+x["b"])
    })

我为什么会得到

x["a"] + x["b"] 中的错误:二元运算符的非数字参数

?

我不能修改 apply 循环中的值吗?

【问题讨论】:

  • return(as.numeric(x["a"])+as.numeric(x["b"])) 你只需要这个。不,如果你想改变它们,你需要使用 assign&lt;&lt;- 不推荐
  • 为什么要单独更改值?你可以直接在apply函数中做as.numeric(x)。您期望的输出是什么?如果要将值更改为数字,请使用 a[] &lt;- lapply(a, as.numeric)。如果您想按行使用sum,请在此之后执行rowSums(a)
  • 这只是一个简化的例子。我的一些列是数字的,而在我的apply 中我需要两者。然后我每次都必须做as.numeric
  • @M-M 如果你把它变成答案,我会验证它
  • 您的尝试不起作用的原因是因为您的x 调用中的apply 是向量,并且向量只能保存一种类型的值。当您执行x["a"]&lt;- as.numeric(x["a"]) 时,它会将x["a"] 转换为数字,但由于x["b"] 仍然是一个字符,它会再次将x["a"] 强制转换为字符。 x["b"] 也是如此。

标签: r apply


【解决方案1】:

你可以这样做:

apply(a,1,function(x) as.numeric(x["a"]) + as.numeric(x["b"]))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    相关资源
    最近更新 更多