需要帮助理解R for循环错误:“}”

时间:2017-11-29 23:43:20

标签: r for-loop error-handling

首先给出一些背景知识:

我目前有2个数据框(长颈鹿,叶子),它们都共享列'key',其中叶子数据框中的元素是长颈鹿的子集。我需要做的是比较两个数据帧,当'key'列中的两个数据帧中都有匹配的元素时,字符串'leaf'将被输入到长颈鹿数据框内的另一列(项目)中row作为匹配的'key'元素。我采取了以下方法,但似乎我在某处发生了一个小错误,在网上搜索后,我仍然不知道它是什么:

Truth_vector <- is.element((giraffe[,1]),(leaf[,1]))#返回一个包含3000个元素的向量,大多数都是FALSE,除了'key'中的元素存在于两个数据帧中

i=1
for (i in 1:length(giraffe[,1])) {
  if Truth_vector[i] == TRUE {
   giraffe[i,5] <- 'leaf'
  }
  i = i+1
}

Error: unexpected '}' in "}"

编辑:

我尝试将解决方案作为一个函数实现,但是最终没有发生任何事情,也没有返回任何错误消息。我所做的是:

Project_assign <- function(prjct) {
Truth_vector <- is.element((giraffe[,1]),(prjct[,1]))
giraffe[which(Truth_vector),5] <- 'prjct'
}
Project_assign(leaf)

编辑:这是因为所有内容都在功能子环境中分配,而不是全局环境。使用assign('giraffe',giraffe,envir = .GlobalEnv)解决了这个问题,你应该尝试避免使用assign函数,而是使用for循环遍历所有数据帧的列表

1 个答案:

答案 0 :(得分:3)

你有几个问题。首先,if标准需要在括号中,其次,您不需要自己增加i。这应该足够了:

for (i in 1:length(giraffe[,1])) {
  if (Truth_vector[i] == TRUE) {
   giraffe[i,5] <- 'leaf'
  }
}

当然,这也会这样做:

giraffe[which(Truth_vector),5] <- 'leaf'

(假设Truth_vector不长于长颈鹿的行数)