楼主: 昆仑雪山
1006 3

R语言问题求助 [推广有奖]

  • 0关注
  • 0粉丝

学前班

60%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
1.0905
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
53 点
帖子
2
精华
0
在线时间
3 小时
注册时间
2024-1-10
最后登录
2025-1-22

楼主
昆仑雪山 发表于 2024-1-20 20:33:38 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我在运用下边readDat函数时总是报错,我试了自己先创建一个temp文件不行,把cmd换成适合windows的系统命令也不行,请各位前辈帮忙找找原因。
f1=readDat("RawData/Study1-Flanker/",22)时
总是报错:Warning: cannot open file 'temp': No such file or directoryError in file(file, "rt") : cannot open the connection

完整的readDat函数是这样的:
readDat=function(fileString,topLen)
{
        cmd=paste("ls -1 ",root,fileString, " >temp",sep='')
        system(cmd)
        filenames=as.vector(read.table('temp'))

        dat=NULL
        nFiles=dim(filenames)[1]
        subLab=sesLab=1:nFiles
        for (n in 1:nFiles){
                string=filenames[n,1]
                sesLab[n]=as.integer(str_sub(string,start = -5, end= -5 ))
                subLab[n]=ifelse(str_length(string)==topLen,
                        as.integer(str_sub(string,start=9,end=10)),
                        as.integer(str_sub(string,start=9,end=9)))
                partial0=read.csv(head=F,
                        paste(root,fileString,'//',as.character(string),sep=''))
                colnames(partial0)=
                        c('blk','trl','stim','cond','acc','rt')
                sub=rep(subLab[n],length(partial0[,1]))
                session=rep(sesLab[n],length(partial0[,1]))
                partial1=cbind(sub,session,partial0)
                dat=rbind(dat,partial1)
        }
        return(dat)
}

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:R语言问题 R语言 connection directory Character

沙发
zheliang01 发表于 2024-1-21 03:57:50
你遇到的问题可能是由于系统命令执行失败导致的。首先,确保你的R脚本所在的工作目录(working directory)正确设置,并且有足够的权限执行系统命令。另外,建议使用R的list.files函数来获取文件列表,而不是依赖系统命令。

以下是更新后的readDat函数,使用list.files来获取文件列表:

R
Copy code
readDat = function(fileString, topLen) {
  filenames = list.files(path = fileString, full.names = TRUE)

  dat = NULL
  nFiles = length(filenames)
  subLab = sesLab = 1:nFiles

  for (n in 1:nFiles) {
    string = filenames[n]
    sesLab[n] = as.integer(str_sub(string, start = -5, end = -5))
    subLab[n] = ifelse(str_length(string) == topLen,
                       as.integer(str_sub(string, start = 9, end = 10)),
                       as.integer(str_sub(string, start = 9, end = 9)))

    partial0 = read.csv(string)
    colnames(partial0) = c('blk', 'trl', 'stim', 'cond', 'acc', 'rt')
    sub = rep(subLab[n], length(partial0[, 1]))
    session = rep(sesLab[n], length(partial0[, 1]))
    partial1 = cbind(sub, session, partial0)
    dat = rbind(dat, partial1)
  }

  return(dat)
}
这个版本的函数使用list.files来获取文件列表,并直接读取文件,而不需要调用系统命令。确保你的R脚本的工作目录正确设置,并尝试运行这个更新后的函数。如果仍然有问题,请提供更多详细的错误信息,以便更好地帮助你解决问题。
已有 1 人评分经验 收起 理由
cheetahfly + 100 热心帮助其他会员

总评分: 经验 + 100   查看全部评分

藤椅
zheliang01 发表于 2024-1-21 03:58:17
readDat = function(fileString, topLen) {
  filenames = list.files(path = fileString, full.names = TRUE)

  dat = NULL
  nFiles = length(filenames)
  subLab = sesLab = 1:nFiles

  for (n in 1:nFiles) {
    string = filenames[n]
    sesLab[n] = as.integer(str_sub(string, start = -5, end = -5))
    subLab[n] = ifelse(str_length(string) == topLen,
                       as.integer(str_sub(string, start = 9, end = 10)),
                       as.integer(str_sub(string, start = 9, end = 9)))

    partial0 = read.csv(string)
    colnames(partial0) = c('blk', 'trl', 'stim', 'cond', 'acc', 'rt')
    sub = rep(subLab[n], length(partial0[, 1]))
    session = rep(sesLab[n], length(partial0[, 1]))
    partial1 = cbind(sub, session, partial0)
    dat = rbind(dat, partial1)
  }

  return(dat)
}
已有 1 人评分经验 收起 理由
cheetahfly + 100 热心帮助其他会员

总评分: 经验 + 100   查看全部评分

板凳
昆仑雪山 发表于 2024-1-28 20:46:52
zheliang01 发表于 2024-1-21 03:57
你遇到的问题可能是由于系统命令执行失败导致的。首先,确保你的R脚本所在的工作目录(working directory) ...
感谢回答!不再使用系统命令后可以往下运行啦!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-22 16:19