是否有任何功能可以将.numbers(Apple的电子表格程序)文件导入R?我可以使用read.xls
包中的gdata
导入.xlsx文件。但是使用read.xls
对.numbers文件无效。
答案 0 :(得分:1)
没有正式的软件包和@Roland的权利,因为您可以更好地使用File->Export->CSV
来获取数据。如果您只需要一个表 - 例如:
您需要可以离开选择单元格并使用pbpaste
:
dat <- read.csv(pipe('pbpaste'), sep='\t')
dat
## A B
## 1 4 456
## 2 5 346
## 3 5 345
## 4 34 345
## 5 4 345
## 6 45 345
## 7 46 345
## 8 3456 345
## 9 678 34
## 10 568 34
这不是可扩展的。
或者,Numbers已经重新获得AppleScript支持并且它有一个export
调用,所以理论上 - 创建一个文件夹操作或命令行脚本以获取一个或多个.numbers
非常简单文件并将它们放到CSV中。这也可以是在R中编写一个瘦的“垫片”模块或函数的方法,它可以在幕后执行(ee read.numbers("myfile.numbers", table=1)
然后将这个Numbers表格导出并将第一个表格导出为CSV文件然后使用read.csv
来阅读它。
<强>更新强>
为此,这里是对来自https://stackoverflow.com/users/1982991/plang]的(@plang)[another SO post的脚本的修改,该脚本适用于最新版本的Numbers。把它变成read.numbers()
函数/包并不是太困难,但是我不需要构建它,因为它需要处理太多边缘条件,这些条件表示Numbers如何从具有多个表/表的文档中保存CSV文档。
当前用于Numbers的AppleScript字典可以直接从脚本执行打开和读取表(IMO仍然需要使用pbpaste
hack,因为我认为没有R&lt; - &gt; AppleScript网桥)。它可以通过Java&lt; - &gt; AppleScript桥完成,但考虑到需要直接使用Numbers文档的人口较少,这似乎有些过分。
我仍然建议将脚本(下面)转换为文件夹操作,并将需要在R中使用的Numbers文件拖到它进行批量转换。
# - input: Numbers input file
# - output: CSV output file
#
# Attik System, Philippe Lang
#
# Orig from: https://stackoverflow.com/a/10845335/1457051
#
# Creation date: 31 mai 2012
# Modification date: 07-Apr-2014 by @hrbrmstr
# -------------------------------------------------------------------------------
on run argv
# We retreive the path of the script
set myPath to (path to me)
tell application "Finder" to set myFolder to folder of myPath
# We get the command line parameters
set input_file to item 1 of argv
set output_file to item 2 of argv
# We retreive the extension of the file
set theInfo to (info for (input_file))
set extname to name extension of (theInfo)
# Paths
set input_file_path to (myFolder as text) & input_file
set output_file_path to (myFolder as text) & output_file
log input_file_path
log output_file_path
if extname is equal to "numbers" then
tell application "Numbers"
open input_file_path
export document 1 as CSV to output_file_path
close every window saving no
end tell
end if
end run