readtable不读逻辑值

31日视图(30天)
我用的版本9.9.0.1592791 (R2020b)更新5。
我发现这种行为虽然读写表通过readtable()和writetable ()。
%首先,我做一个表并将它写入文件:
敏= 1;
mychar = {' 1 '};
mybool = true;
t =表();
t = addvars (t,敏);
t = addvars (t, mychar);
t = addvars (t, mybool)
writetable (t)“mytable.csv”);
%这给表t:
% {
t =
1×3表
敏mychar mybool
_____交
1{' 1 '}真的
%}
% . csv文件:
% {
敏,mychar mybool
1,1,1
%}
%注意,“真正的”写成“1”预计
%现在,我试着读表,正确设置选项:
选择= detectImportOptions (“mytable.csv”);
选择= setvartype(选择,“敏”,“int8”);
选择= setvartype(选择,“mychar”,“字符”);
选择= setvartype(选择,“mybool”,“逻辑”);
t = readtable (“mytable.csv”选择)
%,而不是预期的结果的表值1(整数),“1”(一个字符),和真正的(逻辑),得到:
% {
t =
1×3表
敏mychar mybool
_____交
1{' 1 '}假
%}
%当我改变我的文件:
% {
敏,mychar mybool
1,1,真的
%}
% readtable()读取数据如预期,给:
% {
t =
1×3表
int char bool
___ _____ _____
1{' 1 '}真的
%}
为什么会这样?这是意想不到的,特别是考虑到writetable写逻辑值为“0”和“1”。这是预期的或这是一个错误吗?
注意:当我使用xls . csv,而是它的行为。
1评论
亚当Danz
亚当Danz 2021年8月10日
编辑:亚当Danz 2021年8月10日
在R2021a同样的行为。这是意想不到的。
你应该报告技术支持:万博1manbetx 联系我们- MATLAB仿真软件万博1manbetx
解决方法,阅读在逻辑列双然后转换逻辑。
选择= setvartype(选择,“mybool”,“双”);
t = readtable (“mytable.csv”、选择);
t。mybool =逻辑(t.mybool);

登录置评。

接受的答案

杰里米·休斯
杰里米·休斯 2021年8月10日
编辑:杰里米·休斯 2021年8月10日
默认的结果 detectImportOptions 看到 “1” & “0” 将数值,默认逻辑阅读期待 “真正的”、“t” “假”、“f” (不分大小写),但这是重写的。
T = array2table (randn (6,3) > 0)
T =6×3表
Var1 Var2 Var3 _____ _____ _____真的真的真的真的真的假的真的假的真的真的真的真的假假真的真的假的事实
writetable (T)“mytable.csv”,“WriteVariableNames”假)
选择= delimitedTextImportOptions (“NumVariables”3,
“VariableNames”,(“敏”,“mychar”,“mybool”),
“VariableTypes”,(“int8”,“字符”,“逻辑”]);
getvaropts(选择,“mybool”)
ans =
LogicalVariableImportOptions特性:变量属性:名称:“mybool”类型:“逻辑”FillValue: 0 TreatAsMissing: {} QuoteRule:“删除”前缀:{}后缀:{}EmptyFieldRule:“失踪”逻辑选项:TrueSymbols:{“真正的”“t”} FalseSymbols:{“假的”“f”} CaseSensitive: 0
你可以当作什么 真正的 真与假的符号。
选择= setvaropts(选择,“mybool”,
“TrueSymbols”,(“t”,“真正的”,“1”),
“FalseSymbols”,(“f”,“假”,“0”]);
t = readtable (“mytable.csv”选择)
t =6×3表
mychar mybool _____ ______ ______{' 1 '}真的1{' 1 '}假1{' 0 '}真1{' 1 '}真的0{' 0 '}成立1{' 0 '}成立
注意: 这只会匹配0和1,不像假的“0.0”或“2”没错,但大多数情况下应该足够了。
11日评论
杰里米·休斯
杰里米·休斯 2022年6月21日
嗨,案件的快速关闭的原因是报告系统中已经存在,不认为是一个错误。你的期望和该特性不一致的设计,但它的工作是设计。这是,至少从“政策”的角度来看,这是一个增强的原因。不幸的是,改变默认的行为将导致沉默更改现有使用预计当前的行为。我意识到这并不是最令人满意的答案。
根据你的期望,而不是“逻辑”你最好继续把它看作一个进口数量(uint8也许),,然后把它。没有任何性能的影响,只是一条线:
t。mybool =逻辑(t.mybool)
只要没有工作的“T”或“真”值。范式的逻辑表示需要一致的文件中至少,或者是没有希望的。

登录置评。

更多的答案(0)

类别

找到更多的在循环和条件语句帮助中心文件交换

s manbetx 845


释放

R2020b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!