我对R来说相对较新,并且在文件提取方面苦苦挣扎。
我在我的目录001.csv
中有一个CSV文件列表(即002.csv
,xyz
,....),需要根据用户提供的输入提取特定文件。
用户输入的格式为1
,2
...(存储在y
),我尝试通过引导0来转换。
当我运行代码时
filename = as.character(formatC(y, width=3, flag=0))
list.files(directory,pattern = "^",filename,"\\.csv$")
我得到了结果
character[0]
这意味着我的模式代码不正确,我想要提取例如:001.csv
的文件
有人可以帮帮我吗?
答案 0 :(得分:0)
您似乎错过了匹配任何以filename
开头的文件的模式,然后可以匹配任何0+个字符,并以.csv
结尾。
要构建它,请使用paste0
:
files <- list.files(directory, pattern = paste0("^", filename, ".*\\.csv$"))
其中:
"^"
- 文件名字符串的开头filename
- 您传递的文件名".*\\.csv$"
- 任意0个字符(.*
),后跟.csv
(\\.csv
)字符串末尾($
)。答案 1 :(得分:0)
formatC
0
标志y
似乎只适用于数字对象;如果您使用e读取用户输入y = readline()
。 G。 y
,filename = formatC(as.integer(y), width=3, flag=0)
的类型为&#34;字符&#34;。您可以使用
as.character()
(formatC()
不是必需的,因为list.files(directory,pattern = "^",filename,"\\.csv$")
值已经具有该类型。)
list.files(path = ".", pattern = NULL, all.files = FALSE, full.names = FALSE, recursive = FALSE, ignore.case = FALSE)
这不是
的正确用法"^"
- 当然你打算连接filename
,"\\.csv$"
和sprintf()
。
总而言之,我建议用filename = sprintf("%03d\\.csv", as.integer(y))
list.files(directory, filename)
构建整个文件名模式,i。 E:
<activity
android:name="SplashActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation|screenSize">