小编Pat*_*gon的帖子

在R之间没有for循环的行之间移动值

我编写了一些用于组织以不同频率采样的数据的代码,但是我广泛使用了for循环,当数据集很大时,这会大大降低代码的操作速度.我一直在浏览我的代码,找到删除for循环以加快速度的方法,但其中一个循环让我感到难过.

举个例子,假设数据是以3Hz采样的,所以每秒数据都会得到三行.但是,变量A,B和C各自以1Hz采样,因此每三行我将获得一个值.在一秒周期内连续采样变量,导致数据的对角性质.

更复杂的是,有时在原始数据集中会丢失一行.

我的目标是:确定了我希望保留的行后,我想将后续行中的非NA值移动到守护者行中.如果它不是丢失的数据问题,我将始终保持行包含第一个变量的值,但如果其中一行丢失,我将保留下一行.

在下面的示例中,第六个样本和第十个样本丢失.

A <- c(1, NA, NA, 4, NA, 7, NA, NA, NA, NA)
B <- c(NA, 2, NA, NA, 5, NA, 8, NA, 11, NA)
C <- c(NA, NA, 3, NA, NA, NA, NA, 9, NA, 12)

test_df <- data.frame(A = A, B = B, C = C)

test_df
     A  B  C
 1   1 NA NA
 2  NA  2 NA
 3  NA NA  3
 4   4 NA NA
 5  NA  5 NA
 6   7 NA NA …
Run Code Online (Sandbox Code Playgroud)

performance for-loop r dataframe

7
推荐指数
1
解决办法
1345
查看次数

将参数传递给 backgroundWorker(用作取消按钮)

我是 C# 和面向对象编程的新手。我一直在尝试在我的 GUI 中实现一个“取消”按钮,以便用户可以在过程中停止它。

我读过这个问题:如何实现停止/取消按钮?并确定 backgroundWorker 对我来说应该是一个不错的选择,但是给出的示例没有解释如何将参数传递给 backgroundWorker。

我的问题是我不知道如何将参数传递给 backgroundWorker 以使其停止进程;我只能让 backgroundWorker 停止自己。

我创建了以下代码来尝试了解这一点,其中我的表单有两个按钮(buttonStart 和 buttonStop)和一个 backgroundWorker(backgroundWorkerStopCheck):

using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Threading;
using System.Timers;

namespace TestBackgroundWorker
{
    public partial class Form1 : Form
    {
        public Form1()
        {         
            InitializeComponent();

            // Set the background worker to allow the user to stop the process. 
            backgroundWorkerStopCheck.WorkerSupportsCancellation = true;
        }

        private System.Timers.Timer myTimer;

        private void backgroundWorkerStopCheck_DoWork(object sender, DoWorkEventArgs e)
        {
            //If cancellation is pending, cancel work.  
            if (backgroundWorkerStopCheck.CancellationPending)
            { …
Run Code Online (Sandbox Code Playgroud)

c# multithreading backgroundworker argument-passing cancel-button

4
推荐指数
1
解决办法
6105
查看次数

检查数组列表的大小

我有一个字符串数组列表:

List<string[]> parsedRaw = new List<string[]>();
Run Code Online (Sandbox Code Playgroud)

此列表包含从CSV读入的行,其中parsedRaw [3] [5]将是从CSV的第三行读取的第五个项目.

我知道我可以在列表中找到行数:

parsedRaw.Count
Run Code Online (Sandbox Code Playgroud)

但是,给定一行,如何找到该行中的元素数量?我正在尝试在进入循环以从列表中读取之前实现测试,以避免"索引超出数组的范围"错误,其中循环是:

for (k = 0; k < nBytes; k++)
{
    TheseBytes[k] = (byte)parsedRaw[i][StartInt + k];
}
Run Code Online (Sandbox Code Playgroud)

我遇到了CSV中一行中的错误,其中元素少于其他元素.在进入此循环之前,我需要检查parsedRaw [i]是否至少具有"StartInt + nBytes"元素.

谢谢你的任何建议!

c# list indexoutofboundsexception

3
推荐指数
1
解决办法
2714
查看次数