Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中创建一个简单的for循环_R_For Loop - Fatal编程技术网

在R中创建一个简单的for循环

在R中创建一个简单的for循环,r,for-loop,R,For Loop,我有一个名为“Volume”的TIBLE,其中存储了一些数据(10列-前2列是字符,30行)。 现在我想计算与我的tibble的第3列相对应的每一列的相对体积。 我当前的解决方案如下所示: rel.Volume_unmod = tibble( "Volume_OD" = Volume[[3]] / Volume[[3]], "Volume_Imp" = Volume[[4]] / Volume[[3]],

我有一个名为“Volume”的TIBLE,其中存储了一些数据(10列-前2列是字符,30行)。 现在我想计算与我的tibble的第3列相对应的每一列的相对体积。 我当前的解决方案如下所示:

rel.Volume_unmod = tibble(
            "Volume_OD" = Volume[[3]] / Volume[[3]],
            "Volume_Imp" = Volume[[4]] / Volume[[3]],
            "Volume_OD_1" = Volume[[5]] / Volume[[3]],
            "Volume_WS_1" = Volume[[6]] / Volume[[3]],
            "Volume_OD_2"  = Volume[[7]] / Volume[[3]],
            "Volume_WS_2" = Volume[[8]] / Volume[[3]], 
            "Volume_OD_3" = Volume[[9]] / Volume[[3]],
            "Volume_WS_3" = Volume[[10]] / Volume[[3]])
rel.Volume_unmod 
我想保留tibble结构和标签。我确信有更好的解决方案,但我对R比较陌生,所以我不太清楚。我尝试的是这样的,但实际上我无法运行:

rel.Volume = NULL
for(i in Volume[,3:10]){

rel.Volume[i] = tibble(Volume = Volume[[i]] / Volume[[3]])
}
模型数据 因为您没有提供一些数据,所以我按照您提供的描述创建了一些模型数据。在这里:

set.seed(1)
体积模型数据
因为您没有提供一些数据,所以我按照您提供的描述创建了一些模型数据。在这里:

set.seed(1)

体积没有最小的工作示例,很难猜测变量
Volume
实际指的是什么。除此之外,您的
for
-循环似乎存在问题:

for(i in Volume[,3:10]){
假设
引用的是
数据帧
tible
,这将导致索引介于3和10之间的实际列向量依次分配给
i
。您可以通过将
print(i)
放入循环中来验证这一点。但在循环内部,似乎您实际上想要使用
i
作为变量,仅包含当前列的索引作为数字(而不是列本身):

另外,两个括号通常用于列表,而不是
data.frames
tibbles
。(但是,您可以这样做,因为
data.frames
是列表的特例。)

最后但并非最不重要的一点是,在尝试重新分配给该变量时,使用
NULL
初始化变量
rel.Volume
,将导致错误,因为您尚未告知
R
rel.Volume
应该是什么

如果您愿意,请尝试以下方法(感谢@Edo提供的示例数据):


既然你说你是新来的
R
,坦率地说,我建议你在学习基础知识的时候不要使用Tidyverse软件包。根据我的经验,从长远来看,你最好先学习base-
R
,在你更熟悉核心语言的时候加上“糖”。以后您仍然可以学习使用Tidyverse函数(但是,为什么会有人?;-)。

没有一个简单的工作示例,很难猜测变量
Volume
实际指的是什么。除此之外,您的
for
-循环似乎存在问题:

for(i in Volume[,3:10]){
假设
引用的是
数据帧
tible
,这将导致索引介于3和10之间的实际列向量依次分配给
i
。您可以通过将
print(i)
放入循环中来验证这一点。但在循环内部,似乎您实际上想要使用
i
作为变量,仅包含当前列的索引作为数字(而不是列本身):

另外,两个括号通常用于列表,而不是
data.frames
tibbles
。(但是,您可以这样做,因为
data.frames
是列表的特例。)

最后但并非最不重要的一点是,在尝试重新分配给该变量时,使用
NULL
初始化变量
rel.Volume
,将导致错误,因为您尚未告知
R
rel.Volume
应该是什么

如果您愿意,请尝试以下方法(感谢@Edo提供的示例数据):


既然你说你是新来的
R
,坦率地说,我建议你在学习基础知识的时候不要使用Tidyverse软件包。根据我的经验,从长远来看,你最好先学习base-
R
,在你更熟悉核心语言的时候加上“糖”。以后您仍然可以学习使用Tidyverse函数(但是,为什么会有人?;-)。

欢迎使用堆栈溢出。请使您的问题具有可复制性:使用
dput(卷)
将数据的副本粘贴到问题中,请参见欢迎使用堆栈溢出。请使您的问题具有可复制性:使用
dput(Volume)
将数据的副本粘贴到问题中参见询问“为什么有人会学习Tidyverse函数”是一种狭隘的做法。
tidyverse
软件包是下载量最大的软件包之一,这是因为人们看到了其中的价值。然后,如果你不喜欢它们,那么很公平:你不必使用它们。您可以使用base-R自己编写所有代码。但是,
tidyverse
函数经过测试,它们有很好的文档,提供了可以理解的错误和警告。这取决于你的范围。在大多数R课程中,
tidyverse
是必须的。[继续]如果您不喜欢
tidyverse
,我建议您查看
data.table
。这是基于一个不同的概念,但它是(对许多人来说)现在使R极具竞争力的原因<代码>数据。表
围绕一致性、速度和简洁性的概念构建。而且它比
tidyverse
软件包对其他软件包更友好(因为一些tidyverse函数修改了一些base-R函数)。请查看更多关于主题的信息。对不起,最后一个短语的意思是相当开玩笑地指代正在进行的关于tidyverse的“火焰战争”。我认为这是显而易见的。我编辑了我的帖子,加入了一个闪烁的笑脸,让它更清晰。无论如何,我想你并没有真正理解我想要表达的意思:我只是建议你在学习基本知识的时候不要使用tidyverse。从我教R的经验来看,对于大多数初学者来说,理解核心语言已经足够难了。从长远来看,你通常最好先学习实际的基础知识,并在学习过程中添加语法糖。哎呀,哈哈,对不起我并不是故意说得不好。实际上,我只是想帮助卡洛。我想通常是初学者
rel.Volume[i] = tibble(Volume = Volume[[i]] / Volume[[3]])
set.seed(1)

Volume <- data.frame(ID = sample(letters, 30, TRUE),
                     GR = sample(LETTERS, 30, TRUE),
                     Vol1 = rnorm(30),
                     Vol2 = rnorm(30),
                     Vol3 = rnorm(30))

rel.Volume <- Volume[1:2] # Assuming you want to keep the IDs.
# Your data.frame will need to have the correct number of rows here already.

for (i in 3:ncol(Volume)){ # ncol gives the total number of columns in data.frame
  rel.Volume[i]  = Volume[i]/Volume[3]
}
# OK, this one messes up variable names...
rel.V.2 <- data.frame(sapply(X = Volume[3:5], FUN = function(x) x/Volume[3]))

rel.V.3 <- data.frame(Map(`/`, Volume[3:5], Volume[3]))