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 ()
答案 0 :(得分:1)
变量names
和numbers
不存在于函数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;
中一个很好的可重复的例子