这是我的问题:我使用" fread"以大约100,000行的方式阅读大约300万行和100列。功能。对于每一块数据,我正在做一些组织数据集,提取应用某些条件的一些行(例如物种名称=狗,朱利安日期范围是x到y,人口范围小于z等),然后写出一个csv文件包含每个块的选择列(比如10个而不是全部100个),以便稍后我可以访问该文件。我将具有针对每个物种的特定功能。我尝试用以下方式编写一个函数,以便我可以在循环中使用它,我用它来读取块中的300万条记录。
假设DF1是具有100列的第1 100,000个行块的数据帧。
dog.1 <- function(){
#Creating vectors for each of the 10 columns
stdate <- DF1$V8
spcdog <- DF1$23
.
.
.
NDF1 <- data.frame(stdate,spcdog, ........)
}
当我调用此函数时,我期待向量(stdate,spcdog .....)和data.frame&#34; NDF1&#34;要被创造。我知道向量和数据框是创建的,但显然我在函数关闭后会丢失函数内创建的所有变量。我应该如何解决这个问题?我只想保留数据框。
我提前感谢任何帮助。
答案 0 :(得分:0)
因此,尝试消除“NDF1&lt; - ”,然后你应该看到至少一些输出(我没有信息说它是否正确)
答案 1 :(得分:0)
您需要从该函数中捕获值:
dog.1 <- function(){
#Creating vectors for each of the 10 columns
stdate <- DF1$V8
spcdog <- DF1$V23 # oops ... cannot have variables named with just numerals
data.frame(stdate,spcdog)
}
NDF1 <- dog.1()
我不会这样做,但我认为正在发生的事情是你的努力可能没有错误,但结果没有分配给一个名字。 NDF1对象正在创建,但一旦函数调用完成就会丢失,因为它只存在于函数环境中。与其他评论者不同,我认为如果您的版本被调用,您应该看到结果。但也许缺少测试用例会阻止我在理解中看到错误。这不是第一次。
DF <- data.frame(V8 = 1:10, V23=letters[1:10], V24 = letters[11:20])
dog.1 <- function(){
#Creating vectors for each of the 10 columns
stdate <- DF1$V8
spcdog <- DF1$V23 # oops ... cannot have variables named with just numerals
data.frame(stdate,spcdog)
}
dog.1 <- function(){
stdate <- DF$V8
spcdog <- DF$V23
data.frame(stdate,spcdog)
}
NDF1 <- dog.1()
dog.1()
stdate spcdog
1 1 a
2 2 b
3 3 c
4 4 d
5 5 e
6 6 f
7 7 g
8 8 h
9 9 i
10 10 j
> str(NDF1)
'data.frame': 10 obs. of 2 variables:
$ stdate: int 1 2 3 4 5 6 7 8 9 10
$ spcdog: Factor w/ 10 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10
我将<-
作为最终函数调用的版本错了。我认为<-
会返回赋值的RHS值,但显然不会。尽管如此,在赋值的RHS中使用它将成功的意义上,该函数将“起作用”:
> dog.1 <- function(){
+ stdate <- DF$V8
+ spcdog <- DF$V23
+ XYZ <- data.frame(stdate,spcdog)
+ }
> NDF1 <- dog.1()
> str(NDF1) # success
'data.frame': 10 obs. of 2 variables:
$ stdate: int 1 2 3 4 5 6 7 8 9 10
$ spcdog: Factor w/ 10 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10
> dog.1()
> # no screen output
> # But if you used .Last.value you would see the data.frame
> # So we know that the data.frame is being returned but it
> # is being returned invisibly.
> .Last.value
stdate spcdog
1 1 a
2 2 b
3 3 c
4 4 d
5 5 e
6 6 f
7 7 g
8 8 h
9 9 i
10 10 j