do.call()怎么在R语言中使用

  介绍

今天就跟大家聊聊有关do.call()怎么在R语言中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

祝辞,x1 =1:10   祝辞x2  11=,   祝辞,x3 =,   祝辞,data.frame (x1, x2, x3)   ,,x1  x2  x3   1,,,1,11日,21岁   2,,,2,12,22岁   3,,,3,13日,23日   4,,,4,14,24   5,,,5日,15日,25岁   6,,,6,16岁,26岁   7,,,7日,17日,27日   8,,,8日,18岁的,28岁   9,,,9日,19日,29岁   10,10,20年,30

你可以在data.frame函数中加入任意多的向量参数(x1, x2, x3都是向量)。

不过现在的情况是:你明确知道你仅将这三个向量拼凑成一个数据框就行了,那么,你写成data.frame (x1, x2, x3)是最好的方法,没必要写成如下的方式:

祝辞,do.call (“data.frame",列表(x1, x2, x3))   ,,X1.10  X11.20  X21.30   1,,,,,,1,,,,,11,,,,,21岁   2,,,,,,2,,,,,12,,,,,22岁   3,,,,,,3,,,,,13,,,,,23岁   4,,,,,,4,,,,,14日,,,,,24   5,,,,,,5,,,,,15,,,,,25岁   6,,,,,,6,,,,,16,,,,,26岁   7,,,,,,7,,,,,17岁,,,,,27岁   8日,,,,,,8,,,,,18,,,,,28   9,,,,,,9,,,,,19岁,,,,,29岁   10 10,,,,,,,,,20,,,,,30

不过,假设你遇到的情况是这样:你现在需要从磁盘上的某个文件中读入所有行次的数据,但是随情况变化,文件的长度会发生改变。

可是你打算编写一个能同时应对各种长度文件的程序,程序目的是将文件中各行的内容竖过来,按列组成一个数据框。

那么请问你有哪些方法?——read.table () + t(),好吧,我承认我又输了,看来做。电话还不是最好的选项。

那么如果这个文件各行的类型不同呢?比如一行字符,一行数字,一行布尔值,如此循环延伸,你又能怎么办?

f =,文件(“abc.txt",,“r")   时间=n 长度(count.fields (“abc.txt")),/3   l =,列表()   for (小姐:拷贝1:n), {   ,,,,,,,l[[(张)* 3,+,1]],=,扫描(f=file ,, sep =,,,,,, nlines =, 1, what =,,,,, quiet =,真的)   ,,,,,,,l[[(张)* 3,+,2]],=,扫描(f=file ,, sep =,,,,,, nlines =, 1, what =, 0,, quiet =,真的)   ,,,,,,,l[[(张)* 3,+,3]],=,扫描(f=file ,, sep =,,,,,, nlines =, 1, what =,真的,,quiet =,真的)   }   名称(l),=,粘贴(“l",, 1:长度(l), sep =,,,)   时间=r  do.call (“data.frame",,左)   打印(r)

仍然有替代方案:

(1)我就用read.table () + t(),大不了事后再按列转换类型!

(2)仍然是上述循环,我不要每次都把值押入列表中,我直接创建data.frame,之后再用cbind()逐列添加,这样就用不着do.call了

那么现在再次提高难度:取消转置函数t()的使用,不允许使用cbind()函数。那么你只能用do.call了。

我其实一点都不蛮横,只要换一种情境即可,ffbase包,专门处理大数据的扩展包,其中ffdf对象与data.frame类似(不过可容纳更多数据),但不容易增添新列,且无法转置! ffdf函数是什么你不需要知道,你只要知道它也可以添加任意多的参数即可。

好吧,下面就是一个涉及ffbase包的程序片段

来感受一下do.call的用法吧:

addStrategyData  & lt;作用;函数(detailList,指数),{   ,   a 才能=,列表()   时间=x 才能;detailList[[指数]]   vMode 才能=,酸式焦磷酸钠(名字(x),函数(y),开关(y,   ,,,,,“s",=,“integer",   ,,,,,“t",=,“double",   ,,,,,“f",=,“logical"))   ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,   名称(vMode)才能,=,名字(x)   x 才能=,as.ffdf (x), vmode =, vMode)   ,   for 才能;(小姐:1:拷贝ncol (x)),一个[[我]],=,x[[我]]   for 才能;(小姐:拷贝(长度(a), +, 1:长度(detailList))),一个[[我]],=,ff(假,,length =, nrow (x), vmode =,“logical")   ,,一个[[ncol (x), +,指数]],=,ff(真的,,length =, nrow (x), vmode =,“logical")   null   null   null

do.call()怎么在R语言中使用