【问题标题】:Why do I get an "Error in Parse" for && operator in R?为什么我在 R 中得到 && 运算符的“解析错误”?
【发布时间】:2021-12-10 01:33:03
【问题描述】:

ed_error 是一个包含两列的数据框。 我想逐行遍历所有行并将1添加到我创建的变量中,前提是第一列中值的字符串名称等于“general”并且第二列的整数值等于1。

这就是数据的样子。

代码:

general_list <- 0

for (row in 1:nrow(ed_error)) {
    if (ed_error[row, 1] == "general") && (ed_error[row, 2] == 1) {
        general_list <- general_list + 1 }
                               }

错误:

Error in parse(text = x, srcfile = src):
5: for (row in 1:nrow(ed_error)) {
6:     if (ed_error[row, 1] == "general") &&
                                          ^

【问题讨论】:

    标签: r dataframe for-loop logical-operators


    【解决方案1】:

    if)&amp;&amp; 之前结束

     if (ed_error[row, 1] == "general")
    

    > if('a' == 'b') && ('c' == 'd')
    Error: unexpected '&&' in "if('a' == 'b') &&"
    

    应该是

    general_list <- 0
    for (row in 1:nrow(ed_error)) {
    if(ed_error[[1]][row] == "general" && ed_error[[2]][row] == 1) {
         general_list <- general_list + 1
        }
    }
    

    我们也可以使用矢量化选项

    general_list <- nrow(subset(ed_error, education %in% 'general' & error %in% 1))
    

    【讨论】:

    • 谢谢,我对括号感到困惑。我刚开始学习 R。
    【解决方案2】:

    在 R 中,大多数事情都不需要显式的 for 循环。这种比较可以向量化的方式进行,并使用sum来计算条件满足的次数。

    general_list <- sum(ed_error$education == "general" & ed_error$error == 1)
    

    如果数据中有NA 值,您可以在sum 中添加na.rm = TRUE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-08
      • 2011-05-16
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多