Matlab:使用Splitapply写入多个文件

时间:2019-11-19 18:26:54

标签: matlab split-apply-combine

我已按变量对表进行了分组,并且尝试基于分组变量来写入多个文件。但这不起作用。

我曾经使用findgroupssplitapply,但是splitapply是我遇到问题的地方。

这是我使用的命令的一种版本:

load patients;
G=findgroups(Gender);
func=@(x,y) csvwrite(x,y);
splitapply(func,Gender,Weight,G);

我收到以下错误消息:

  

使用splitapply时出错(第132行)
  将函数'@(x,y)csvwrite(x,y)'应用于第一组数据会产生以下错误:

     

FILENAME必须是字符向量或字符串标量。

当我弄清楚如何使用它时,将在大型数据存储高阵列上使用它。请帮忙!

1 个答案:

答案 0 :(得分:0)

问题在于csvwrite的第一个参数必须是文件名

在您的代码示例中,csvwrite的第一个参数是单元格数组,而不是字符串。

您可以使用以下技巧来查看它:

func=@(x,y) display(x);

splitapply(func,Gender,Weight,G)的输出是:

x =

  53×1 cell array

    {'Female'}
    {'Female'}
    {'Female'}
   ...

x =

  47×1 cell array

    {'Male'}
    {'Male'}
    {'Male'}

解决方案:
使用x{1}代替x

func=@(x,y) csvwrite(x{1}, y);

建议在文件名中添加.txt之类的文件扩展名:

func=@(x,y) csvwrite([x{1}, '.txt'], y);

备注:
splitapplycsvwrite的组合可能会丢失splitapply函数的原始意图。
根据文档,看来splitapply更适合用于统计计算(而不打算用于I / O操作[写入文件])。
我不确定上述代码模式是否是“在大型数据存储塔阵列上使用它”的正确方法。


完整的代码示例:

load patients;
G=findgroups(Gender);

%The first parameter of csvwrite must be a file name.
%x{1} = 'Male' for all the Male group, and 'Female' for all the Female group.
%[x{1}, '.txt'] adds a '.txt' extension to the file name.
%
%y will be array of Weight like
%[71
% 69
% 68]
func=@(x,y) csvwrite([x{1}, '.txt'], y);

splitapply(func,Gender,Weight,G)