if == True;但内置函数不运行

时间:2017-10-01 20:07:24

标签: arrays r string function

f <- readLines('/home/dogus/Desktop/phonezzzz/vcards.txt', encoding="UTF-8")

#empty lists
names <- c()
numbers <- c()

phonezz <- function(){

  for(i in 1:length(f)){

    if("FN" == substring(f[i],0,2)){
    name <- substring(f[i],4)  # doesn't run
    number <- substring(f[i+1],10) # doesn't run

    names <- c(names, name) # doesn't run ; append 'name' into the 'names' list
    numbers <- c(numbers, number) # doesn't run
    print("Hello World")}

    else{
    print("------") 
    next
      }
  }
}
phonezz()
names

以下是要点链接:https://gist.github.com/dgsbicak/b9e2d4fb1dbb70c964295ef88120f404

我使用R Studio。

当我运行此脚本时,在“全局环境”部分中显示:

值:

f           chr[1:3000] "some string" "some string2" "FN:213123123123" ...
names       NULL (empty)
numbers     NULL (empty)

功能:

phonezz     function ()

因此名称和数字变量甚至不存在;名称列表显示一个空列表。 正如我所说,它返回了很多“Hello World”。 所以我不明白这是什么问题?

亲切的问候,

编辑:

f <- readLines('/home/dogus/Desktop/phonezzzz/vcards.txt', encoding="UTF-8")

names <- c()
numbers <- c()

phonezz <- function() {for(i in 1:length(f))
  {
    if("FN" == substring(f[i],0,2)){
      name <<- substring(f[i],4)
      number <<- substring(f[i+1],10)
      names <<- c(names, name)
      numbers <<- c(numbers, number)
      print("Hello World")
      return(list(names, numbers))
    }
    else{
      print("------")
      next
    }
  }
}
phone <- phonezz()
phone

现在的结果是:

值:

f         chr[1:3089] "asdasd" "asdasd" ...
name      "just last person's name"
number    "just last person's number"

names     "just last person's name in the list"
numbers   "just last person's number in the list"
phone     List of 2

功能:

phonezz   function ()

2 个答案:

答案 0 :(得分:1)

变量namesnumbers不存在于函数phonezz()之外 按照上面的建议添加return(list(names, numbers)。 然后将函数调用为test_list <- phonezz()。变量test_list应包含名称和数字。

答案 1 :(得分:1)

这不会创建列表:

req.session.username = "Blahblahblah'

证明:

numbers <- c()

改为使用:

is.list(c())
[1] FALSE

然后另一个问题是my.names <- list() #don't use `names` ... it's the name of a function numbers <- list() - 循环不返回任何东西(除了它确实返回NULL,但这很少有用)。它仅在您的功能的本地环境中运行。另一个(次要)问题是R中的索引从1开始(非0),因此for可能并不真正有意义。如果您对代码进行了评论,我们可能会知道您是否需要2或3个字母。我猜2,因为你比较了&#34; FN&#34;。使用substring(f[i],0,2)。然后看看:

substring(f[i],1,2)

然后还有一个问题,即你的 substring("string", 4) [1] "ing" # so it returns the entire "tail" of the the input character value - 循环覆盖了每个值。所以如果你只得到一组价值,你不应该感到惊讶。您需要索引for - 循环内的项目,然后在需要另外应用for操作所需的循环外部。 return只会将这些值推到一个级别&#34; up&#34;它仍然在功能环境中。外面什么都不会发生。

如果你有一个完整的例子,我们可以提供一个有效的解决方案,但我认为这可以帮助你理解在你开始学习R的过程中立即可见的几个问题。参见[MCVE]和&#34;如何制作R&#34;

中一个很好的可重复的例子